[
  {
    "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"
      }
    ]
  }
]