pi-usereq 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/.g.conf +20 -0
  2. package/.github/workflows/release-npm.yml +131 -0
  3. package/.gitignore +270 -0
  4. package/CHANGELOG.md +221 -0
  5. package/LICENSE +674 -0
  6. package/README.md +260 -0
  7. package/TODO.md +20 -0
  8. package/docs/pi.dev/agent-document-manifest.json +6399 -0
  9. package/docs/pi.dev/coding-agent-docs/compaction.md +394 -0
  10. package/docs/pi.dev/coding-agent-docs/custom-provider.md +596 -0
  11. package/docs/pi.dev/coding-agent-docs/development.md +71 -0
  12. package/docs/pi.dev/coding-agent-docs/extensions.md +2262 -0
  13. package/docs/pi.dev/coding-agent-docs/images/doom-extension.png +0 -0
  14. package/docs/pi.dev/coding-agent-docs/images/exy.png +0 -0
  15. package/docs/pi.dev/coding-agent-docs/images/interactive-mode.png +0 -0
  16. package/docs/pi.dev/coding-agent-docs/images/tree-view.png +0 -0
  17. package/docs/pi.dev/coding-agent-docs/json.md +82 -0
  18. package/docs/pi.dev/coding-agent-docs/keybindings.md +175 -0
  19. package/docs/pi.dev/coding-agent-docs/models.md +392 -0
  20. package/docs/pi.dev/coding-agent-docs/packages.md +218 -0
  21. package/docs/pi.dev/coding-agent-docs/prompt-templates.md +67 -0
  22. package/docs/pi.dev/coding-agent-docs/providers.md +195 -0
  23. package/docs/pi.dev/coding-agent-docs/rpc.md +1377 -0
  24. package/docs/pi.dev/coding-agent-docs/sdk.md +1124 -0
  25. package/docs/pi.dev/coding-agent-docs/session.md +412 -0
  26. package/docs/pi.dev/coding-agent-docs/settings.md +247 -0
  27. package/docs/pi.dev/coding-agent-docs/shell-aliases.md +13 -0
  28. package/docs/pi.dev/coding-agent-docs/skills.md +232 -0
  29. package/docs/pi.dev/coding-agent-docs/terminal-setup.md +106 -0
  30. package/docs/pi.dev/coding-agent-docs/termux.md +127 -0
  31. package/docs/pi.dev/coding-agent-docs/themes.md +295 -0
  32. package/docs/pi.dev/coding-agent-docs/tmux.md +61 -0
  33. package/docs/pi.dev/coding-agent-docs/tree.md +231 -0
  34. package/docs/pi.dev/coding-agent-docs/tui.md +887 -0
  35. package/docs/pi.dev/coding-agent-docs/windows.md +17 -0
  36. package/docs/pi.dev/mom-docs/artifacts-server.md +475 -0
  37. package/docs/pi.dev/mom-docs/events.md +307 -0
  38. package/docs/pi.dev/mom-docs/new.md +970 -0
  39. package/docs/pi.dev/mom-docs/sandbox.md +153 -0
  40. package/docs/pi.dev/mom-docs/slack-bot-minimal-guide.md +399 -0
  41. package/docs/pi.dev/mom-docs/v86.md +319 -0
  42. package/docs/pi.dev/pods-docs/gml-4.5.md +189 -0
  43. package/docs/pi.dev/pods-docs/gpt-oss.md +233 -0
  44. package/docs/pi.dev/pods-docs/implementation-plan.md +183 -0
  45. package/docs/pi.dev/pods-docs/kimi-k2.md +197 -0
  46. package/docs/pi.dev/pods-docs/models.md +116 -0
  47. package/docs/pi.dev/pods-docs/plan.md +166 -0
  48. package/docs/pi.dev/pods-docs/qwen3-coder.md +132 -0
  49. package/images/flowchart-bw.png +0 -0
  50. package/images/flowchart-bw.svg +102 -0
  51. package/images/flowchart.md +100 -0
  52. package/images/flowchart.png +0 -0
  53. package/images/flowchart.svg +3 -0
  54. package/package.json +46 -0
  55. package/req/docs/REFERENCES.md +4554 -0
  56. package/req/docs/REQUIREMENTS.md +475 -0
  57. package/req/docs/WORKFLOW.md +1059 -0
  58. package/scripts/debug-extension.ts +497 -0
  59. package/scripts/lib/extension-debug-harness.ts +450 -0
  60. package/scripts/lib/recording-extension-api.ts +786 -0
  61. package/scripts/lib/sdk-smoke.ts +503 -0
  62. package/scripts/pi-usereq-debug.sh +330 -0
  63. package/scripts/tool-args-to-params.ts +208 -0
  64. package/src/cli.ts +349 -0
  65. package/src/core/agent-tool-json.ts +621 -0
  66. package/src/core/compress-files.ts +72 -0
  67. package/src/core/compress-payload.ts +648 -0
  68. package/src/core/compress.ts +464 -0
  69. package/src/core/config.ts +272 -0
  70. package/src/core/doxygen-parser.ts +318 -0
  71. package/src/core/errors.ts +31 -0
  72. package/src/core/extension-status.ts +660 -0
  73. package/src/core/find-constructs.ts +319 -0
  74. package/src/core/find-payload.ts +915 -0
  75. package/src/core/generate-markdown.ts +120 -0
  76. package/src/core/path-context.ts +196 -0
  77. package/src/core/pi-notify.ts +430 -0
  78. package/src/core/pi-usereq-tools.ts +140 -0
  79. package/src/core/prompts.ts +184 -0
  80. package/src/core/reference-payload.ts +818 -0
  81. package/src/core/resources.ts +63 -0
  82. package/src/core/runtime-project-paths.ts +99 -0
  83. package/src/core/settings-menu.ts +233 -0
  84. package/src/core/source-analyzer.ts +1721 -0
  85. package/src/core/static-check.ts +674 -0
  86. package/src/core/token-counter.ts +729 -0
  87. package/src/core/tool-runner.ts +717 -0
  88. package/src/core/utils.ts +185 -0
  89. package/src/index.ts +2209 -0
  90. package/src/resources/guidelines/Google_C++_Style_Guide.md +3711 -0
  91. package/src/resources/guidelines/Google_Python_Style_Guide.md +3709 -0
  92. package/src/resources/prompts/analyze.md +130 -0
  93. package/src/resources/prompts/change.md +227 -0
  94. package/src/resources/prompts/check.md +139 -0
  95. package/src/resources/prompts/cover.md +219 -0
  96. package/src/resources/prompts/create.md +104 -0
  97. package/src/resources/prompts/fix.md +221 -0
  98. package/src/resources/prompts/flowchart.md +220 -0
  99. package/src/resources/prompts/implement.md +163 -0
  100. package/src/resources/prompts/new.md +226 -0
  101. package/src/resources/prompts/readme.md +182 -0
  102. package/src/resources/prompts/recreate.md +213 -0
  103. package/src/resources/prompts/refactor.md +213 -0
  104. package/src/resources/prompts/references.md +100 -0
  105. package/src/resources/prompts/renumber.md +119 -0
  106. package/src/resources/prompts/workflow.md +202 -0
  107. package/src/resources/prompts/write.md +99 -0
  108. package/src/resources/sounds/Machine-alert-beep-sound-effect.mp3 +0 -0
  109. package/src/resources/sounds/Soft-high-tech-notification-sound-effect.mp3 +0 -0
  110. package/src/resources/templates/Document_Source_Code_in_Doxygen_Style.md +130 -0
  111. package/src/resources/templates/HDT_Test_Authoring_Guide.md +318 -0
  112. package/src/resources/templates/Requirements_Template.md +78 -0
  113. package/tests/attended-results-scenarios.ts +758 -0
  114. package/tests/attended-results.test.ts +39 -0
  115. package/tests/cli-command-option-parity.test.ts +815 -0
  116. package/tests/debug-extension-harness.test.ts +463 -0
  117. package/tests/extension-registration.test.ts +2006 -0
  118. package/tests/fixtures/fixture_c.c +361 -0
  119. package/tests/fixtures/fixture_cpp.cpp +407 -0
  120. package/tests/fixtures/fixture_csharp.cs +411 -0
  121. package/tests/fixtures/fixture_elixir.ex +409 -0
  122. package/tests/fixtures/fixture_go.go +341 -0
  123. package/tests/fixtures/fixture_haskell.hs +250 -0
  124. package/tests/fixtures/fixture_java.java +430 -0
  125. package/tests/fixtures/fixture_javascript.js +383 -0
  126. package/tests/fixtures/fixture_kotlin.kt +451 -0
  127. package/tests/fixtures/fixture_lua.lua +276 -0
  128. package/tests/fixtures/fixture_perl.pl +310 -0
  129. package/tests/fixtures/fixture_php.php +433 -0
  130. package/tests/fixtures/fixture_python.py +502 -0
  131. package/tests/fixtures/fixture_ruby.rb +345 -0
  132. package/tests/fixtures/fixture_rust.rs +380 -0
  133. package/tests/fixtures/fixture_scala.scala +398 -0
  134. package/tests/fixtures/fixture_shell.sh +276 -0
  135. package/tests/fixtures/fixture_swift.swift +397 -0
  136. package/tests/fixtures/fixture_typescript.ts +434 -0
  137. package/tests/fixtures/fixture_zig.zig +295 -0
  138. package/tests/fixtures_attended_results/project/compress-line-numbers.json +5 -0
  139. package/tests/fixtures_attended_results/project/compress.json +5 -0
  140. package/tests/fixtures_attended_results/project/enable-static-check-invalid-command.json +5 -0
  141. package/tests/fixtures_attended_results/project/enable-static-check-valid.json +5 -0
  142. package/tests/fixtures_attended_results/project/files-static-check.json +5 -0
  143. package/tests/fixtures_attended_results/project/find-line-numbers.json +5 -0
  144. package/tests/fixtures_attended_results/project/find.json +5 -0
  145. package/tests/fixtures_attended_results/project/get-base-path.json +5 -0
  146. package/tests/fixtures_attended_results/project/git-check-clean.json +5 -0
  147. package/tests/fixtures_attended_results/project/git-check-dirty.json +5 -0
  148. package/tests/fixtures_attended_results/project/git-path.json +5 -0
  149. package/tests/fixtures_attended_results/project/git-wt-create-invalid.json +5 -0
  150. package/tests/fixtures_attended_results/project/git-wt-create-valid.json +5 -0
  151. package/tests/fixtures_attended_results/project/git-wt-delete-nonexistent.json +5 -0
  152. package/tests/fixtures_attended_results/project/git-wt-delete-valid.json +5 -0
  153. package/tests/fixtures_attended_results/project/git-wt-name.json +5 -0
  154. package/tests/fixtures_attended_results/project/references.json +5 -0
  155. package/tests/fixtures_attended_results/project/static-check.json +5 -0
  156. package/tests/fixtures_attended_results/project/tokens.json +5 -0
  157. package/tests/fixtures_attended_results/standalone/files-compress/fixture_c.c.json +5 -0
  158. package/tests/fixtures_attended_results/standalone/files-compress/fixture_cpp.cpp.json +5 -0
  159. package/tests/fixtures_attended_results/standalone/files-compress/fixture_csharp.cs.json +5 -0
  160. package/tests/fixtures_attended_results/standalone/files-compress/fixture_elixir.ex.json +5 -0
  161. package/tests/fixtures_attended_results/standalone/files-compress/fixture_go.go.json +5 -0
  162. package/tests/fixtures_attended_results/standalone/files-compress/fixture_haskell.hs.json +5 -0
  163. package/tests/fixtures_attended_results/standalone/files-compress/fixture_java.java.json +5 -0
  164. package/tests/fixtures_attended_results/standalone/files-compress/fixture_javascript.js.json +5 -0
  165. package/tests/fixtures_attended_results/standalone/files-compress/fixture_kotlin.kt.json +5 -0
  166. package/tests/fixtures_attended_results/standalone/files-compress/fixture_lua.lua.json +5 -0
  167. package/tests/fixtures_attended_results/standalone/files-compress/fixture_perl.pl.json +5 -0
  168. package/tests/fixtures_attended_results/standalone/files-compress/fixture_php.php.json +5 -0
  169. package/tests/fixtures_attended_results/standalone/files-compress/fixture_python.py.json +5 -0
  170. package/tests/fixtures_attended_results/standalone/files-compress/fixture_ruby.rb.json +5 -0
  171. package/tests/fixtures_attended_results/standalone/files-compress/fixture_rust.rs.json +5 -0
  172. package/tests/fixtures_attended_results/standalone/files-compress/fixture_scala.scala.json +5 -0
  173. package/tests/fixtures_attended_results/standalone/files-compress/fixture_shell.sh.json +5 -0
  174. package/tests/fixtures_attended_results/standalone/files-compress/fixture_swift.swift.json +5 -0
  175. package/tests/fixtures_attended_results/standalone/files-compress/fixture_typescript.ts.json +5 -0
  176. package/tests/fixtures_attended_results/standalone/files-compress/fixture_zig.zig.json +5 -0
  177. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_c.c.json +5 -0
  178. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_cpp.cpp.json +5 -0
  179. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_csharp.cs.json +5 -0
  180. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_elixir.ex.json +5 -0
  181. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_go.go.json +5 -0
  182. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_haskell.hs.json +5 -0
  183. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_java.java.json +5 -0
  184. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_javascript.js.json +5 -0
  185. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_kotlin.kt.json +5 -0
  186. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_lua.lua.json +5 -0
  187. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_perl.pl.json +5 -0
  188. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_php.php.json +5 -0
  189. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_python.py.json +5 -0
  190. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_ruby.rb.json +5 -0
  191. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_rust.rs.json +5 -0
  192. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_scala.scala.json +5 -0
  193. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_shell.sh.json +5 -0
  194. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_swift.swift.json +5 -0
  195. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_typescript.ts.json +5 -0
  196. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_zig.zig.json +5 -0
  197. package/tests/fixtures_attended_results/standalone/files-find/fixture_c.c.json +5 -0
  198. package/tests/fixtures_attended_results/standalone/files-find/fixture_cpp.cpp.json +5 -0
  199. package/tests/fixtures_attended_results/standalone/files-find/fixture_csharp.cs.json +5 -0
  200. package/tests/fixtures_attended_results/standalone/files-find/fixture_elixir.ex.json +5 -0
  201. package/tests/fixtures_attended_results/standalone/files-find/fixture_go.go.json +5 -0
  202. package/tests/fixtures_attended_results/standalone/files-find/fixture_haskell.hs.json +5 -0
  203. package/tests/fixtures_attended_results/standalone/files-find/fixture_java.java.json +5 -0
  204. package/tests/fixtures_attended_results/standalone/files-find/fixture_javascript.js.json +5 -0
  205. package/tests/fixtures_attended_results/standalone/files-find/fixture_kotlin.kt.json +5 -0
  206. package/tests/fixtures_attended_results/standalone/files-find/fixture_lua.lua.json +5 -0
  207. package/tests/fixtures_attended_results/standalone/files-find/fixture_perl.pl.json +5 -0
  208. package/tests/fixtures_attended_results/standalone/files-find/fixture_php.php.json +5 -0
  209. package/tests/fixtures_attended_results/standalone/files-find/fixture_python.py.json +5 -0
  210. package/tests/fixtures_attended_results/standalone/files-find/fixture_ruby.rb.json +5 -0
  211. package/tests/fixtures_attended_results/standalone/files-find/fixture_rust.rs.json +5 -0
  212. package/tests/fixtures_attended_results/standalone/files-find/fixture_scala.scala.json +5 -0
  213. package/tests/fixtures_attended_results/standalone/files-find/fixture_shell.sh.json +5 -0
  214. package/tests/fixtures_attended_results/standalone/files-find/fixture_swift.swift.json +5 -0
  215. package/tests/fixtures_attended_results/standalone/files-find/fixture_typescript.ts.json +5 -0
  216. package/tests/fixtures_attended_results/standalone/files-find/fixture_zig.zig.json +5 -0
  217. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_c.c.json +5 -0
  218. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_cpp.cpp.json +5 -0
  219. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_csharp.cs.json +5 -0
  220. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_elixir.ex.json +5 -0
  221. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_go.go.json +5 -0
  222. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_haskell.hs.json +5 -0
  223. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_java.java.json +5 -0
  224. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_javascript.js.json +5 -0
  225. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_kotlin.kt.json +5 -0
  226. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_lua.lua.json +5 -0
  227. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_perl.pl.json +5 -0
  228. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_php.php.json +5 -0
  229. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_python.py.json +5 -0
  230. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_ruby.rb.json +5 -0
  231. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_rust.rs.json +5 -0
  232. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_scala.scala.json +5 -0
  233. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_shell.sh.json +5 -0
  234. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_swift.swift.json +5 -0
  235. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_typescript.ts.json +5 -0
  236. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_zig.zig.json +5 -0
  237. package/tests/fixtures_attended_results/standalone/files-references/fixture_c.c.json +5 -0
  238. package/tests/fixtures_attended_results/standalone/files-references/fixture_cpp.cpp.json +5 -0
  239. package/tests/fixtures_attended_results/standalone/files-references/fixture_csharp.cs.json +5 -0
  240. package/tests/fixtures_attended_results/standalone/files-references/fixture_elixir.ex.json +5 -0
  241. package/tests/fixtures_attended_results/standalone/files-references/fixture_go.go.json +5 -0
  242. package/tests/fixtures_attended_results/standalone/files-references/fixture_haskell.hs.json +5 -0
  243. package/tests/fixtures_attended_results/standalone/files-references/fixture_java.java.json +5 -0
  244. package/tests/fixtures_attended_results/standalone/files-references/fixture_javascript.js.json +5 -0
  245. package/tests/fixtures_attended_results/standalone/files-references/fixture_kotlin.kt.json +5 -0
  246. package/tests/fixtures_attended_results/standalone/files-references/fixture_lua.lua.json +5 -0
  247. package/tests/fixtures_attended_results/standalone/files-references/fixture_perl.pl.json +5 -0
  248. package/tests/fixtures_attended_results/standalone/files-references/fixture_php.php.json +5 -0
  249. package/tests/fixtures_attended_results/standalone/files-references/fixture_python.py.json +5 -0
  250. package/tests/fixtures_attended_results/standalone/files-references/fixture_ruby.rb.json +5 -0
  251. package/tests/fixtures_attended_results/standalone/files-references/fixture_rust.rs.json +5 -0
  252. package/tests/fixtures_attended_results/standalone/files-references/fixture_scala.scala.json +5 -0
  253. package/tests/fixtures_attended_results/standalone/files-references/fixture_shell.sh.json +5 -0
  254. package/tests/fixtures_attended_results/standalone/files-references/fixture_swift.swift.json +5 -0
  255. package/tests/fixtures_attended_results/standalone/files-references/fixture_typescript.ts.json +5 -0
  256. package/tests/fixtures_attended_results/standalone/files-references/fixture_zig.zig.json +5 -0
  257. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_c.c.json +5 -0
  258. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_cpp.cpp.json +5 -0
  259. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_csharp.cs.json +5 -0
  260. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_elixir.ex.json +5 -0
  261. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_go.go.json +5 -0
  262. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_haskell.hs.json +5 -0
  263. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_java.java.json +5 -0
  264. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_javascript.js.json +5 -0
  265. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_kotlin.kt.json +5 -0
  266. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_lua.lua.json +5 -0
  267. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_perl.pl.json +5 -0
  268. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_php.php.json +5 -0
  269. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_python.py.json +5 -0
  270. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_ruby.rb.json +5 -0
  271. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_rust.rs.json +5 -0
  272. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_scala.scala.json +5 -0
  273. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_shell.sh.json +5 -0
  274. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_swift.swift.json +5 -0
  275. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_typescript.ts.json +5 -0
  276. package/tests/fixtures_attended_results/standalone/files-tokens/fixture_zig.zig.json +5 -0
  277. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_c.c.json +5 -0
  278. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_cpp.cpp.json +5 -0
  279. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_csharp.cs.json +5 -0
  280. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_elixir.ex.json +5 -0
  281. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_go.go.json +5 -0
  282. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_haskell.hs.json +5 -0
  283. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_java.java.json +5 -0
  284. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_javascript.js.json +5 -0
  285. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_kotlin.kt.json +5 -0
  286. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_lua.lua.json +5 -0
  287. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_perl.pl.json +5 -0
  288. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_php.php.json +5 -0
  289. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_python.py.json +5 -0
  290. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_ruby.rb.json +5 -0
  291. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_rust.rs.json +5 -0
  292. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_scala.scala.json +5 -0
  293. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_shell.sh.json +5 -0
  294. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_swift.swift.json +5 -0
  295. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_typescript.ts.json +5 -0
  296. package/tests/fixtures_attended_results/standalone/test-static-check-command/fixture_zig.zig.json +5 -0
  297. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_c.c.json +5 -0
  298. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_cpp.cpp.json +5 -0
  299. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_csharp.cs.json +5 -0
  300. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_elixir.ex.json +5 -0
  301. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_go.go.json +5 -0
  302. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_haskell.hs.json +5 -0
  303. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_java.java.json +5 -0
  304. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_javascript.js.json +5 -0
  305. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_kotlin.kt.json +5 -0
  306. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_lua.lua.json +5 -0
  307. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_perl.pl.json +5 -0
  308. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_php.php.json +5 -0
  309. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_python.py.json +5 -0
  310. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_ruby.rb.json +5 -0
  311. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_rust.rs.json +5 -0
  312. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_scala.scala.json +5 -0
  313. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_shell.sh.json +5 -0
  314. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_swift.swift.json +5 -0
  315. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_typescript.ts.json +5 -0
  316. package/tests/fixtures_attended_results/standalone/test-static-check-dummy/fixture_zig.zig.json +5 -0
  317. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_c.c.json +5 -0
  318. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_cpp.cpp.json +5 -0
  319. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_csharp.cs.json +5 -0
  320. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_elixir.ex.json +5 -0
  321. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_go.go.json +5 -0
  322. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_haskell.hs.json +5 -0
  323. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_java.java.json +5 -0
  324. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_javascript.js.json +5 -0
  325. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_kotlin.kt.json +5 -0
  326. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_lua.lua.json +5 -0
  327. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_perl.pl.json +5 -0
  328. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_php.php.json +5 -0
  329. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_python.py.json +5 -0
  330. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_ruby.rb.json +5 -0
  331. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_rust.rs.json +5 -0
  332. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_scala.scala.json +5 -0
  333. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_shell.sh.json +5 -0
  334. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_swift.swift.json +5 -0
  335. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_typescript.ts.json +5 -0
  336. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_zig.zig.json +5 -0
  337. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_c.c.json +5 -0
  338. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_cpp.cpp.json +5 -0
  339. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_csharp.cs.json +5 -0
  340. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_elixir.ex.json +5 -0
  341. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_go.go.json +5 -0
  342. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_haskell.hs.json +5 -0
  343. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_java.java.json +5 -0
  344. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_javascript.js.json +5 -0
  345. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_kotlin.kt.json +5 -0
  346. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_lua.lua.json +5 -0
  347. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_perl.pl.json +5 -0
  348. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_php.php.json +5 -0
  349. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_python.py.json +5 -0
  350. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_ruby.rb.json +5 -0
  351. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_rust.rs.json +5 -0
  352. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_scala.scala.json +5 -0
  353. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_shell.sh.json +5 -0
  354. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_swift.swift.json +5 -0
  355. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_typescript.ts.json +5 -0
  356. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_zig.zig.json +5 -0
  357. package/tests/helpers.ts +204 -0
  358. package/tests/oracle-project.test.ts +63 -0
  359. package/tests/oracle-standalone.test.ts +48 -0
  360. package/tests/prompt-rendering.test.ts +66 -0
  361. package/tests/release-workflow.test.ts +133 -0
@@ -0,0 +1,5 @@
1
+ {
2
+ "code": 0,
3
+ "stdout": "{\n \"request\": {\n \"tool_name\": \"files-references\",\n \"scope\": \"explicit-files\",\n \"base_dir_path\": \"<ROOT>\",\n \"source_directory_count\": 0,\n \"source_directory_paths\": [],\n \"requested_file_count\": 1,\n \"requested_input_paths\": [\n \"tests/fixtures/fixture_csharp.cs\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_csharp.cs\"\n ]\n },\n \"summary\": {\n \"processable_file_count\": 1,\n \"analyzed_file_count\": 1,\n \"error_file_count\": 0,\n \"skipped_file_count\": 0,\n \"total_symbol_count\": 60,\n \"total_import_count\": 5,\n \"total_comment_count\": 199,\n \"total_standalone_comment_count\": 101,\n \"total_doxygen_field_count\": 37,\n \"symbol_kind_counts\": {\n \"CLASS\": 6,\n \"CONSTANT\": 5,\n \"ENUM\": 5,\n \"FUNCTION\": 23,\n \"INTERFACE\": 5,\n \"NAMESPACE\": 5,\n \"PROPERTY\": 6,\n \"STRUCT\": 5\n }\n },\n \"repository\": {\n \"root_directory_path\": \"<ROOT>\",\n \"source_directory_paths\": [],\n \"file_count\": 1,\n \"file_canonical_paths\": [\n \"tests/fixtures/fixture_csharp.cs\"\n ],\n \"directory_tree\": {\n \"node_name\": \".\",\n \"relative_path\": \".\",\n \"node_kind\": \"directory\",\n \"child_count\": 1,\n \"children\": [\n {\n \"node_name\": \"tests\",\n \"relative_path\": \"tests\",\n \"node_kind\": \"directory\",\n \"child_count\": 1,\n \"children\": [\n {\n \"node_name\": \"fixtures\",\n \"relative_path\": \"tests/fixtures\",\n \"node_kind\": \"directory\",\n \"child_count\": 1,\n \"children\": [\n {\n \"node_name\": \"fixture_csharp.cs\",\n \"relative_path\": \"tests/fixtures/fixture_csharp.cs\",\n \"node_kind\": \"file\",\n \"child_count\": 0,\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n },\n \"files\": [\n {\n \"start_line_number\": 1,\n \"end_line_number\": 411,\n \"line_range\": [\n 1,\n 411\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_csharp.cs\",\n \"canonical_path\": \"tests/fixtures/fixture_csharp.cs\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_csharp.cs\",\n \"file_name\": \"fixture_csharp.cs\",\n \"file_extension\": \".cs\",\n \"language_id\": \"csharp\",\n \"language_name\": \"C#\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 60,\n \"comment_count\": 199,\n \"standalone_comment_count\": 101,\n \"doxygen_field_count\": 37,\n \"file_description_text\": \"@file fixture_csharp.cs\",\n \"imports\": [\n {\n \"start_line_number\": 9,\n \"end_line_number\": 9,\n \"line_range\": [\n 9,\n 9\n ],\n \"import_name\": \"System\",\n \"statement_text\": \"using System;\"\n },\n {\n \"start_line_number\": 10,\n \"end_line_number\": 10,\n \"line_range\": [\n 10,\n 10\n ],\n \"import_name\": \"System.Collections.Generic\",\n \"statement_text\": \"using System.Collections.Generic;\"\n },\n {\n \"start_line_number\": 11,\n \"end_line_number\": 11,\n \"line_range\": [\n 11,\n 11\n ],\n \"import_name\": \"System.Linq\",\n \"statement_text\": \"using System.Linq;\"\n },\n {\n \"start_line_number\": 12,\n \"end_line_number\": 12,\n \"line_range\": [\n 12,\n 12\n ],\n \"import_name\": \"System.Threading.Tasks\",\n \"statement_text\": \"using System.Threading.Tasks;\"\n },\n {\n \"start_line_number\": 13,\n \"end_line_number\": 13,\n \"line_range\": [\n 13,\n 13\n ],\n \"import_name\": \"System.Threading\",\n \"statement_text\": \"using System.Threading;\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 15,\n \"end_line_number\": 314,\n \"line_range\": [\n 15,\n 314\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"MyApp\",\n \"qualified_name\": \"MyApp\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace MyApp\",\n \"child_symbol_names\": [\n \"GetInstanceCount\",\n \"FindByIdAsync\",\n \"GetAllAsync\",\n \"SaveAsync\",\n \"ConfigEntry\"\n ],\n \"child_qualified_names\": [\n \"MyApp.GetInstanceCount\",\n \"MyApp.FindByIdAsync\",\n \"MyApp.GetAllAsync\",\n \"MyApp.SaveAsync\",\n \"MyApp.ConfigEntry\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 17,\n \"end_line_number\": 17,\n \"line_range\": [\n 17,\n 17\n ],\n \"text\": \"── Delegates and events ───────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Delegates and events ───────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 19,\n \"end_line_number\": 19,\n \"line_range\": [\n 19,\n 19\n ],\n \"text\": \"@brief Delegate for handling data change notifications.\",\n \"text_lines\": [\n \"@brief Delegate for handling data change notifications.\"\n ]\n },\n {\n \"start_line_number\": 20,\n \"end_line_number\": 20,\n \"line_range\": [\n 20,\n 20\n ],\n \"text\": \"@details Emits sender and payload when tracked data changes.\",\n \"text_lines\": [\n \"@details Emits sender and payload when tracked data changes.\"\n ]\n },\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"@param sender The object raising the event.\",\n \"text_lines\": [\n \"@param sender The object raising the event.\"\n ]\n },\n {\n \"start_line_number\": 22,\n \"end_line_number\": 22,\n \"line_range\": [\n 22,\n 22\n ],\n \"text\": \"@param data The changed data payload.\",\n \"text_lines\": [\n \"@param data The changed data payload.\"\n ]\n },\n {\n \"start_line_number\": 23,\n \"end_line_number\": 23,\n \"line_range\": [\n 23,\n 23\n ],\n \"text\": \"@return Void delegate invocation.\",\n \"text_lines\": [\n \"@return Void delegate invocation.\"\n ]\n },\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"@brief Delegate for value transformation operations.\",\n \"text_lines\": [\n \"@brief Delegate for value transformation operations.\"\n ]\n },\n {\n \"start_line_number\": 27,\n \"end_line_number\": 27,\n \"line_range\": [\n 27,\n 27\n ],\n \"text\": \"@details Applies a deterministic conversion from input to output.\",\n \"text_lines\": [\n \"@details Applies a deterministic conversion from input to output.\"\n ]\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 28,\n \"line_range\": [\n 28,\n 28\n ],\n \"text\": \"@param value The value to transform.\",\n \"text_lines\": [\n \"@param value The value to transform.\"\n ]\n },\n {\n \"start_line_number\": 29,\n \"end_line_number\": 29,\n \"line_range\": [\n 29,\n 29\n ],\n \"text\": \"@return Transformed value.\",\n \"text_lines\": [\n \"@return Transformed value.\"\n ]\n },\n {\n \"start_line_number\": 30,\n \"end_line_number\": 30,\n \"line_range\": [\n 30,\n 30\n ],\n \"text\": \"@details Generic type parameter T defines input and output type.\",\n \"text_lines\": [\n \"@details Generic type parameter T defines input and output type.\"\n ]\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"@param value Input value bound to type T.\",\n \"text_lines\": [\n \"@param value Input value bound to type T.\"\n ]\n },\n {\n \"start_line_number\": 34,\n \"end_line_number\": 34,\n \"line_range\": [\n 34,\n 34\n ],\n \"text\": \"── Attributes ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Attributes ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 36,\n \"end_line_number\": 36,\n \"line_range\": [\n 36,\n 36\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 37,\n \"end_line_number\": 37,\n \"line_range\": [\n 37,\n 37\n ],\n \"text\": \"Custom attribute marking classes that require auditing.\",\n \"text_lines\": [\n \"Custom attribute marking classes that require auditing.\"\n ]\n },\n {\n \"start_line_number\": 38,\n \"end_line_number\": 38,\n \"line_range\": [\n 38,\n 38\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 41,\n \"line_range\": [\n 41,\n 41\n ],\n \"text\": \"<summary>The audit level (1=low, 3=high).</summary>\",\n \"text_lines\": [\n \"<summary>The audit level (1=low, 3=high).</summary>\"\n ]\n },\n {\n \"start_line_number\": 45,\n \"end_line_number\": 45,\n \"line_range\": [\n 45,\n 45\n ],\n \"text\": \"── Main class ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Main class ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 47,\n \"end_line_number\": 47,\n \"line_range\": [\n 47,\n 47\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 48,\n \"end_line_number\": 48,\n \"line_range\": [\n 48,\n 48\n ],\n \"text\": \"Primary class demonstrating various C# constructs including\",\n \"text_lines\": [\n \"Primary class demonstrating various C# constructs including\"\n ]\n },\n {\n \"start_line_number\": 49,\n \"end_line_number\": 49,\n \"line_range\": [\n 49,\n 49\n ],\n \"text\": \"properties, events, indexers, and async patterns.\",\n \"text_lines\": [\n \"properties, events, indexers, and async patterns.\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 50,\n \"line_range\": [\n 50,\n 50\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 54,\n \"end_line_number\": 54,\n \"line_range\": [\n 54,\n 54\n ],\n \"text\": \"<summary>Maximum age constraint for validation.</summary>\",\n \"text_lines\": [\n \"<summary>Maximum age constraint for validation.</summary>\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"<summary>Instance counter tracking total allocations.</summary>\",\n \"text_lines\": [\n \"<summary>Instance counter tracking total allocations.</summary>\"\n ]\n },\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"<summary>Internal name storage with backing field.</summary>\",\n \"text_lines\": [\n \"<summary>Internal name storage with backing field.</summary>\"\n ]\n },\n {\n \"start_line_number\": 63,\n \"end_line_number\": 63,\n \"line_range\": [\n 63,\n 63\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 64,\n \"end_line_number\": 64,\n \"line_range\": [\n 64,\n 64\n ],\n \"text\": \"Full name with validation on set.\",\n \"text_lines\": [\n \"Full name with validation on set.\"\n ]\n },\n {\n \"start_line_number\": 65,\n \"end_line_number\": 65,\n \"line_range\": [\n 65,\n 65\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 66,\n \"end_line_number\": 66,\n \"line_range\": [\n 66,\n 66\n ],\n \"text\": \"<value>Non-null, non-empty person name.</value>\",\n \"text_lines\": [\n \"<value>Non-null, non-empty person name.</value>\"\n ]\n },\n {\n \"start_line_number\": 67,\n \"end_line_number\": 67,\n \"line_range\": [\n 67,\n 67\n ],\n \"text\": \"<exception cref=\\\"ArgumentException\\\">Thrown when value is empty.</exception>\",\n \"text_lines\": [\n \"<exception cref=\\\"ArgumentException\\\">Thrown when value is empty.</exception>\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 71,\n \"line_range\": [\n 71,\n 71\n ],\n \"text\": \"Validate non-empty name\",\n \"text_lines\": [\n \"Validate non-empty name\"\n ]\n },\n {\n \"start_line_number\": 78,\n \"end_line_number\": 78,\n \"line_range\": [\n 78,\n 78\n ],\n \"text\": \"<summary>Person's age with init-only setter.</summary>\",\n \"text_lines\": [\n \"<summary>Person's age with init-only setter.</summary>\"\n ]\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 81,\n \"line_range\": [\n 81,\n 81\n ],\n \"text\": \"<summary>Optional email address (nullable reference type).</summary>\",\n \"text_lines\": [\n \"<summary>Optional email address (nullable reference type).</summary>\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 84,\n \"line_range\": [\n 84,\n 84\n ],\n \"text\": \"<summary>Read-only unique identifier generated at construction.</summary>\",\n \"text_lines\": [\n \"<summary>Read-only unique identifier generated at construction.</summary>\"\n ]\n },\n {\n \"start_line_number\": 87,\n \"end_line_number\": 87,\n \"line_range\": [\n 87,\n 87\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 88,\n \"end_line_number\": 88,\n \"line_range\": [\n 88,\n 88\n ],\n \"text\": \"Event raised when person data changes.\",\n \"text_lines\": [\n \"Event raised when person data changes.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 89,\n \"line_range\": [\n 89,\n 89\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 92,\n \"end_line_number\": 92,\n \"line_range\": [\n 92,\n 92\n ],\n \"text\": \"@brief Construct a new Person with name and age.\",\n \"text_lines\": [\n \"@brief Construct a new Person with name and age.\"\n ]\n },\n {\n \"start_line_number\": 93,\n \"end_line_number\": 93,\n \"line_range\": [\n 93,\n 93\n ],\n \"text\": \"@details Initializes backing fields and updates instance counters.\",\n \"text_lines\": [\n \"@details Initializes backing fields and updates instance counters.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 94,\n \"line_range\": [\n 94,\n 94\n ],\n \"text\": \"@param name Display name (required).\",\n \"text_lines\": [\n \"@param name Display name (required).\"\n ]\n },\n {\n \"start_line_number\": 95,\n \"end_line_number\": 95,\n \"line_range\": [\n 95,\n 95\n ],\n \"text\": \"@param age Age in years (must be 0..MAX_AGE).\",\n \"text_lines\": [\n \"@param age Age in years (must be 0..MAX_AGE).\"\n ]\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 96,\n \"line_range\": [\n 96,\n 96\n ],\n \"text\": \"@return Constructed Person instance.\",\n \"text_lines\": [\n \"@return Constructed Person instance.\"\n ]\n },\n {\n \"start_line_number\": 103,\n \"end_line_number\": 103,\n \"line_range\": [\n 103,\n 103\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 104,\n \"line_range\": [\n 104,\n 104\n ],\n \"text\": \"Greet this person on the console.\",\n \"text_lines\": [\n \"Greet this person on the console.\"\n ]\n },\n {\n \"start_line_number\": 105,\n \"end_line_number\": 105,\n \"line_range\": [\n 105,\n 105\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 107,\n \"end_line_number\": 107,\n \"line_range\": [\n 107,\n 107\n ],\n \"text\": \"Fire data changed event\",\n \"text_lines\": [\n \"Fire data changed event\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"@brief Fetch person data asynchronously with cancellation support.\",\n \"text_lines\": [\n \"@brief Fetch person data asynchronously with cancellation support.\"\n ]\n },\n {\n \"start_line_number\": 113,\n \"end_line_number\": 113,\n \"line_range\": [\n 113,\n 113\n ],\n \"text\": \"@details Waits asynchronously and returns a deterministic payload.\",\n \"text_lines\": [\n \"@details Waits asynchronously and returns a deterministic payload.\"\n ]\n },\n {\n \"start_line_number\": 114,\n \"end_line_number\": 114,\n \"line_range\": [\n 114,\n 114\n ],\n \"text\": \"@param token Cancellation token for cooperative cancellation.\",\n \"text_lines\": [\n \"@param token Cancellation token for cooperative cancellation.\"\n ]\n },\n {\n \"start_line_number\": 115,\n \"end_line_number\": 115,\n \"line_range\": [\n 115,\n 115\n ],\n \"text\": \"@return Formatted data string.\",\n \"text_lines\": [\n \"@return Formatted data string.\"\n ]\n },\n {\n \"start_line_number\": 116,\n \"end_line_number\": 116,\n \"line_range\": [\n 116,\n 116\n ],\n \"text\": \"@details Supports cancellation through token propagation.\",\n \"text_lines\": [\n \"@details Supports cancellation through token propagation.\"\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 122,\n \"line_range\": [\n 122,\n 122\n ],\n \"text\": \"@brief Compare persons by age for sorting.\",\n \"text_lines\": [\n \"@brief Compare persons by age for sorting.\"\n ]\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 123,\n \"line_range\": [\n 123,\n 123\n ],\n \"text\": \"@details Implements IComparable ordering semantics.\",\n \"text_lines\": [\n \"@details Implements IComparable ordering semantics.\"\n ]\n },\n {\n \"start_line_number\": 124,\n \"end_line_number\": 124,\n \"line_range\": [\n 124,\n 124\n ],\n \"text\": \"@param other Person to compare with.\",\n \"text_lines\": [\n \"@param other Person to compare with.\"\n ]\n },\n {\n \"start_line_number\": 125,\n \"end_line_number\": 125,\n \"line_range\": [\n 125,\n 125\n ],\n \"text\": \"@return Comparison result: negative, zero, or positive.\",\n \"text_lines\": [\n \"@return Comparison result: negative, zero, or positive.\"\n ]\n },\n {\n \"start_line_number\": 126,\n \"end_line_number\": 126,\n \"line_range\": [\n 126,\n 126\n ],\n \"text\": \"@details Null values are ordered after non-null instances.\",\n \"text_lines\": [\n \"@details Null values are ordered after non-null instances.\"\n ]\n },\n {\n \"start_line_number\": 132,\n \"end_line_number\": 132,\n \"line_range\": [\n 132,\n 132\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 133,\n \"end_line_number\": 133,\n \"line_range\": [\n 133,\n 133\n ],\n \"text\": \"Dispose of managed resources.\",\n \"text_lines\": [\n \"Dispose of managed resources.\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 134,\n \"line_range\": [\n 134,\n 134\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"text\": \"Cleanup managed resources\",\n \"text_lines\": [\n \"Cleanup managed resources\"\n ]\n },\n {\n \"start_line_number\": 141,\n \"end_line_number\": 141,\n \"line_range\": [\n 141,\n 141\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 142,\n \"end_line_number\": 142,\n \"line_range\": [\n 142,\n 142\n ],\n \"text\": \"Indexer for accessing person properties by name.\",\n \"text_lines\": [\n \"Indexer for accessing person properties by name.\"\n ]\n },\n {\n \"start_line_number\": 143,\n \"end_line_number\": 143,\n \"line_range\": [\n 143,\n 143\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"text\": \"<param name=\\\"propertyName\\\">Name of the property to access.</param>\",\n \"text_lines\": [\n \"<param name=\\\"propertyName\\\">Name of the property to access.</param>\"\n ]\n },\n {\n \"start_line_number\": 145,\n \"end_line_number\": 145,\n \"line_range\": [\n 145,\n 145\n ],\n \"text\": \"<returns>Property value as object, or null.</returns>\",\n \"text_lines\": [\n \"<returns>Property value as object, or null.</returns>\"\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 157,\n \"line_range\": [\n 157,\n 157\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 158,\n \"end_line_number\": 158,\n \"line_range\": [\n 158,\n 158\n ],\n \"text\": \"Deconstruct for pattern matching support.\",\n \"text_lines\": [\n \"Deconstruct for pattern matching support.\"\n ]\n },\n {\n \"start_line_number\": 159,\n \"end_line_number\": 159,\n \"line_range\": [\n 159,\n 159\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 160,\n \"end_line_number\": 160,\n \"line_range\": [\n 160,\n 160\n ],\n \"text\": \"<param name=\\\"name\\\">Output: person name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Output: person name.</param>\"\n ]\n },\n {\n \"start_line_number\": 161,\n \"end_line_number\": 161,\n \"line_range\": [\n 161,\n 161\n ],\n \"text\": \"<param name=\\\"age\\\">Output: person age.</param>\",\n \"text_lines\": [\n \"<param name=\\\"age\\\">Output: person age.</param>\"\n ]\n },\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 168,\n \"end_line_number\": 168,\n \"line_range\": [\n 168,\n 168\n ],\n \"text\": \"Get total number of Person instances created.\",\n \"text_lines\": [\n \"Get total number of Person instances created.\"\n ]\n },\n {\n \"start_line_number\": 169,\n \"end_line_number\": 169,\n \"line_range\": [\n 169,\n 169\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 170,\n \"end_line_number\": 170,\n \"line_range\": [\n 170,\n 170\n ],\n \"text\": \"<returns>Instance count.</returns>\",\n \"text_lines\": [\n \"<returns>Instance count.</returns>\"\n ]\n },\n {\n \"start_line_number\": 174,\n \"end_line_number\": 174,\n \"line_range\": [\n 174,\n 174\n ],\n \"text\": \"── Interface ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Interface ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 176,\n \"end_line_number\": 176,\n \"line_range\": [\n 176,\n 176\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 177,\n \"end_line_number\": 177,\n \"line_range\": [\n 177,\n 177\n ],\n \"text\": \"Interface for greeting operations with default implementation.\",\n \"text_lines\": [\n \"Interface for greeting operations with default implementation.\"\n ]\n },\n {\n \"start_line_number\": 178,\n \"end_line_number\": 178,\n \"line_range\": [\n 178,\n 178\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 180,\n \"end_line_number\": 180,\n \"line_range\": [\n 180,\n 180\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 181,\n \"end_line_number\": 181,\n \"line_range\": [\n 181,\n 181\n ],\n \"text\": \"Say hello to a named person.\",\n \"text_lines\": [\n \"Say hello to a named person.\"\n ]\n },\n {\n \"start_line_number\": 182,\n \"end_line_number\": 182,\n \"line_range\": [\n 182,\n 182\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 183,\n \"end_line_number\": 183,\n \"line_range\": [\n 183,\n 183\n ],\n \"text\": \"<param name=\\\"name\\\">Person's name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ]\n },\n {\n \"start_line_number\": 186,\n \"end_line_number\": 186,\n \"line_range\": [\n 186,\n 186\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"Default farewell implementation.\",\n \"text_lines\": [\n \"Default farewell implementation.\"\n ]\n },\n {\n \"start_line_number\": 188,\n \"end_line_number\": 188,\n \"line_range\": [\n 188,\n 188\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 189,\n \"line_range\": [\n 189,\n 189\n ],\n \"text\": \"<param name=\\\"name\\\">Person's name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ]\n },\n {\n \"start_line_number\": 195,\n \"end_line_number\": 195,\n \"line_range\": [\n 195,\n 195\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 196,\n \"end_line_number\": 196,\n \"line_range\": [\n 196,\n 196\n ],\n \"text\": \"Generic repository interface with covariant type parameter.\",\n \"text_lines\": [\n \"Generic repository interface with covariant type parameter.\"\n ]\n },\n {\n \"start_line_number\": 197,\n \"end_line_number\": 197,\n \"line_range\": [\n 197,\n 197\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 198,\n \"end_line_number\": 198,\n \"line_range\": [\n 198,\n 198\n ],\n \"text\": \"<typeparam name=\\\"T\\\">Entity type, must be a class with parameterless ctor.</typeparam>\",\n \"text_lines\": [\n \"<typeparam name=\\\"T\\\">Entity type, must be a class with parameterless ctor.</typeparam>\"\n ]\n },\n {\n \"start_line_number\": 200,\n \"end_line_number\": 200,\n \"line_range\": [\n 200,\n 200\n ],\n \"text\": \"<summary>Find entity by ID.</summary>\",\n \"text_lines\": [\n \"<summary>Find entity by ID.</summary>\"\n ]\n },\n {\n \"start_line_number\": 203,\n \"end_line_number\": 203,\n \"line_range\": [\n 203,\n 203\n ],\n \"text\": \"<summary>Get all entities as async stream.</summary>\",\n \"text_lines\": [\n \"<summary>Get all entities as async stream.</summary>\"\n ]\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 206,\n \"line_range\": [\n 206,\n 206\n ],\n \"text\": \"<summary>Save an entity.</summary>\",\n \"text_lines\": [\n \"<summary>Save an entity.</summary>\"\n ]\n },\n {\n \"start_line_number\": 210,\n \"end_line_number\": 210,\n \"line_range\": [\n 210,\n 210\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 212,\n \"end_line_number\": 212,\n \"line_range\": [\n 212,\n 212\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 213,\n \"end_line_number\": 213,\n \"line_range\": [\n 213,\n 213\n ],\n \"text\": \"Immutable 2D point struct with operator overloading.\",\n \"text_lines\": [\n \"Immutable 2D point struct with operator overloading.\"\n ]\n },\n {\n \"start_line_number\": 214,\n \"end_line_number\": 214,\n \"line_range\": [\n 214,\n 214\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 216,\n \"end_line_number\": 216,\n \"line_range\": [\n 216,\n 216\n ],\n \"text\": \"<summary>Horizontal coordinate.</summary>\",\n \"text_lines\": [\n \"<summary>Horizontal coordinate.</summary>\"\n ]\n },\n {\n \"start_line_number\": 218,\n \"end_line_number\": 218,\n \"line_range\": [\n 218,\n 218\n ],\n \"text\": \"<summary>Vertical coordinate.</summary>\",\n \"text_lines\": [\n \"<summary>Vertical coordinate.</summary>\"\n ]\n },\n {\n \"start_line_number\": 221,\n \"end_line_number\": 221,\n \"line_range\": [\n 221,\n 221\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 222,\n \"end_line_number\": 222,\n \"line_range\": [\n 222,\n 222\n ],\n \"text\": \"Add two points component-wise.\",\n \"text_lines\": [\n \"Add two points component-wise.\"\n ]\n },\n {\n \"start_line_number\": 223,\n \"end_line_number\": 223,\n \"line_range\": [\n 223,\n 223\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 226,\n \"end_line_number\": 226,\n \"line_range\": [\n 226,\n 226\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 227,\n \"end_line_number\": 227,\n \"line_range\": [\n 227,\n 227\n ],\n \"text\": \"Compute distance from origin.\",\n \"text_lines\": [\n \"Compute distance from origin.\"\n ]\n },\n {\n \"start_line_number\": 228,\n \"end_line_number\": 228,\n \"line_range\": [\n 228,\n 228\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 232,\n \"end_line_number\": 232,\n \"line_range\": [\n 232,\n 232\n ],\n \"text\": \"── Enum ───────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Enum ───────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 234,\n \"end_line_number\": 234,\n \"line_range\": [\n 234,\n 234\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 235,\n \"end_line_number\": 235,\n \"line_range\": [\n 235,\n 235\n ],\n \"text\": \"Color flags enum supporting bitwise combinations.\",\n \"text_lines\": [\n \"Color flags enum supporting bitwise combinations.\"\n ]\n },\n {\n \"start_line_number\": 236,\n \"end_line_number\": 236,\n \"line_range\": [\n 236,\n 236\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 239,\n \"end_line_number\": 239,\n \"line_range\": [\n 239,\n 239\n ],\n \"text\": \"<summary>No color selected.</summary>\",\n \"text_lines\": [\n \"<summary>No color selected.</summary>\"\n ]\n },\n {\n \"start_line_number\": 241,\n \"end_line_number\": 241,\n \"line_range\": [\n 241,\n 241\n ],\n \"text\": \"<summary>Red channel.</summary>\",\n \"text_lines\": [\n \"<summary>Red channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 243,\n \"end_line_number\": 243,\n \"line_range\": [\n 243,\n 243\n ],\n \"text\": \"<summary>Green channel.</summary>\",\n \"text_lines\": [\n \"<summary>Green channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 245,\n \"end_line_number\": 245,\n \"line_range\": [\n 245,\n 245\n ],\n \"text\": \"<summary>Blue channel.</summary>\",\n \"text_lines\": [\n \"<summary>Blue channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 247,\n \"line_range\": [\n 247,\n 247\n ],\n \"text\": \"<summary>All channels combined.</summary>\",\n \"text_lines\": [\n \"<summary>All channels combined.</summary>\"\n ]\n },\n {\n \"start_line_number\": 251,\n \"end_line_number\": 251,\n \"line_range\": [\n 251,\n 251\n ],\n \"text\": \"── Record types ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Record types ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 253,\n \"end_line_number\": 253,\n \"line_range\": [\n 253,\n 253\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 254,\n \"end_line_number\": 254,\n \"line_range\": [\n 254,\n 254\n ],\n \"text\": \"Immutable record for configuration entries.\",\n \"text_lines\": [\n \"Immutable record for configuration entries.\"\n ]\n },\n {\n \"start_line_number\": 255,\n \"end_line_number\": 255,\n \"line_range\": [\n 255,\n 255\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 256,\n \"end_line_number\": 256,\n \"line_range\": [\n 256,\n 256\n ],\n \"text\": \"<param name=\\\"Key\\\">Configuration key.</param>\",\n \"text_lines\": [\n \"<param name=\\\"Key\\\">Configuration key.</param>\"\n ]\n },\n {\n \"start_line_number\": 257,\n \"end_line_number\": 257,\n \"line_range\": [\n 257,\n 257\n ],\n \"text\": \"<param name=\\\"Value\\\">Configuration value.</param>\",\n \"text_lines\": [\n \"<param name=\\\"Value\\\">Configuration value.</param>\"\n ]\n },\n {\n \"start_line_number\": 260,\n \"end_line_number\": 260,\n \"line_range\": [\n 260,\n 260\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 261,\n \"end_line_number\": 261,\n \"line_range\": [\n 261,\n 261\n ],\n \"text\": \"Record struct for lightweight value records (C# 10).\",\n \"text_lines\": [\n \"Record struct for lightweight value records (C# 10).\"\n ]\n },\n {\n \"start_line_number\": 262,\n \"end_line_number\": 262,\n \"line_range\": [\n 262,\n 262\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 263,\n \"end_line_number\": 263,\n \"line_range\": [\n 263,\n 263\n ],\n \"text\": \"<param name=\\\"X\\\">X coordinate.</param>\",\n \"text_lines\": [\n \"<param name=\\\"X\\\">X coordinate.</param>\"\n ]\n },\n {\n \"start_line_number\": 264,\n \"end_line_number\": 264,\n \"line_range\": [\n 264,\n 264\n ],\n \"text\": \"<param name=\\\"Y\\\">Y coordinate.</param>\",\n \"text_lines\": [\n \"<param name=\\\"Y\\\">Y coordinate.</param>\"\n ]\n },\n {\n \"start_line_number\": 267,\n \"end_line_number\": 267,\n \"line_range\": [\n 267,\n 267\n ],\n \"text\": \"── Extension methods ──────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Extension methods ──────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 269,\n \"end_line_number\": 269,\n \"line_range\": [\n 269,\n 269\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 270,\n \"end_line_number\": 270,\n \"line_range\": [\n 270,\n 270\n ],\n \"text\": \"Extension methods for string manipulation.\",\n \"text_lines\": [\n \"Extension methods for string manipulation.\"\n ]\n },\n {\n \"start_line_number\": 271,\n \"end_line_number\": 271,\n \"line_range\": [\n 271,\n 271\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 273,\n \"end_line_number\": 273,\n \"line_range\": [\n 273,\n 273\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 274,\n \"end_line_number\": 274,\n \"line_range\": [\n 274,\n 274\n ],\n \"text\": \"Truncate a string to the specified maximum length.\",\n \"text_lines\": [\n \"Truncate a string to the specified maximum length.\"\n ]\n },\n {\n \"start_line_number\": 275,\n \"end_line_number\": 275,\n \"line_range\": [\n 275,\n 275\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"<param name=\\\"str\\\">Source string.</param>\",\n \"text_lines\": [\n \"<param name=\\\"str\\\">Source string.</param>\"\n ]\n },\n {\n \"start_line_number\": 277,\n \"end_line_number\": 277,\n \"line_range\": [\n 277,\n 277\n ],\n \"text\": \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\",\n \"text_lines\": [\n \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\"\n ]\n },\n {\n \"start_line_number\": 278,\n \"end_line_number\": 278,\n \"line_range\": [\n 278,\n 278\n ],\n \"text\": \"<returns>Truncated string with ellipsis if shortened.</returns>\",\n \"text_lines\": [\n \"<returns>Truncated string with ellipsis if shortened.</returns>\"\n ]\n },\n {\n \"start_line_number\": 284,\n \"end_line_number\": 284,\n \"line_range\": [\n 284,\n 284\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 285,\n \"line_range\": [\n 285,\n 285\n ],\n \"text\": \"Check if a string contains only ASCII characters.\",\n \"text_lines\": [\n \"Check if a string contains only ASCII characters.\"\n ]\n },\n {\n \"start_line_number\": 286,\n \"end_line_number\": 286,\n \"line_range\": [\n 286,\n 286\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 287,\n \"end_line_number\": 287,\n \"line_range\": [\n 287,\n 287\n ],\n \"text\": \"<param name=\\\"str\\\">The string to check.</param>\",\n \"text_lines\": [\n \"<param name=\\\"str\\\">The string to check.</param>\"\n ]\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 288,\n \"line_range\": [\n 288,\n 288\n ],\n \"text\": \"<returns>True if all characters are ASCII.</returns>\",\n \"text_lines\": [\n \"<returns>True if all characters are ASCII.</returns>\"\n ]\n },\n {\n \"start_line_number\": 294,\n \"end_line_number\": 294,\n \"line_range\": [\n 294,\n 294\n ],\n \"text\": \"── Generic class with constraints ─────────────────────────────────────\",\n \"text_lines\": [\n \"── Generic class with constraints ─────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 296,\n \"end_line_number\": 296,\n \"line_range\": [\n 296,\n 296\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 297,\n \"line_range\": [\n 297,\n 297\n ],\n \"text\": \"Generic collection with filtering and transformation support.\",\n \"text_lines\": [\n \"Generic collection with filtering and transformation support.\"\n ]\n },\n {\n \"start_line_number\": 298,\n \"end_line_number\": 298,\n \"line_range\": [\n 298,\n 298\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 299,\n \"end_line_number\": 299,\n \"line_range\": [\n 299,\n 299\n ],\n \"text\": \"<typeparam name=\\\"T\\\">Element type, must be comparable.</typeparam>\",\n \"text_lines\": [\n \"<typeparam name=\\\"T\\\">Element type, must be comparable.</typeparam>\"\n ]\n },\n {\n \"start_line_number\": 303,\n \"end_line_number\": 303,\n \"line_range\": [\n 303,\n 303\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 304,\n \"end_line_number\": 304,\n \"line_range\": [\n 304,\n 304\n ],\n \"text\": \"Add an item maintaining sorted order.\",\n \"text_lines\": [\n \"Add an item maintaining sorted order.\"\n ]\n },\n {\n \"start_line_number\": 305,\n \"end_line_number\": 305,\n \"line_range\": [\n 305,\n 305\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 306,\n \"end_line_number\": 306,\n \"line_range\": [\n 306,\n 306\n ],\n \"text\": \"<param name=\\\"item\\\">Item to insert.</param>\",\n \"text_lines\": [\n \"<param name=\\\"item\\\">Item to insert.</param>\"\n ]\n },\n {\n \"start_line_number\": 308,\n \"end_line_number\": 308,\n \"line_range\": [\n 308,\n 308\n ],\n \"text\": \"Binary search for insertion point\",\n \"text_lines\": [\n \"Binary search for insertion point\"\n ]\n },\n {\n \"start_line_number\": 314,\n \"end_line_number\": 314,\n \"line_range\": [\n 314,\n 314\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 73,\n \"text\": \"throw new ArgumentException(\\\"Name cannot be empty\\\");\"\n },\n {\n \"line_number\": 119,\n \"text\": \"return \\\"data\\\";\"\n },\n {\n \"line_number\": 129,\n \"text\": \"return Age.CompareTo(other.Age);\"\n },\n {\n \"line_number\": 148,\n \"text\": \"return propertyName switch {\"\n },\n {\n \"line_number\": 281,\n \"text\": \"return str[..maxLength] + \\\"...\\\";\"\n },\n {\n \"line_number\": 290,\n \"text\": \"return str.All(c => c < 128);\"\n }\n ]\n },\n {\n \"start_line_number\": 40,\n \"end_line_number\": 43,\n \"line_range\": [\n 40,\n 43\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"AuditableAttribute\",\n \"qualified_name\": \"AuditableAttribute\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"public class AuditableAttribute : Attribute\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"Level\"\n ],\n \"child_qualified_names\": [\n \"AuditableAttribute.Level\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"Attribute\",\n \"decorator_text\": \"[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\",\n \"attached_comment_summary_text\": \"Custom attribute marking classes that require auditing.\",\n \"attached_comment_lines\": [\n \"Custom attribute marking classes that require auditing.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 41,\n \"end_line_number\": 41,\n \"line_range\": [\n 41,\n 41\n ],\n \"text\": \"<summary>The audit level (1=low, 3=high).</summary>\",\n \"text_lines\": [\n \"<summary>The audit level (1=low, 3=high).</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 42,\n \"end_line_number\": 42,\n \"line_range\": [\n 42,\n 42\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"Level\",\n \"qualified_name\": \"AuditableAttribute.Level\",\n \"symbol_kind\": \"PROPERTY\",\n \"type_label\": \"PROPERTY\",\n \"signature_text\": \"public int Level { get; set; } = 1\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"AuditableAttribute\",\n \"parent_qualified_name\": \"AuditableAttribute\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>The audit level (1=low, 3=high).</summary>\",\n \"attached_comment_lines\": [\n \"<summary>The audit level (1=low, 3=high).</summary>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 53,\n \"end_line_number\": 172,\n \"line_range\": [\n 53,\n 172\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"Person\",\n \"qualified_name\": \"Person\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"public class Person : IComparable<Person>, IDisposable\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"MAX_AGE\",\n \"Name\",\n \"Age\",\n \"Id\",\n \"Greet\",\n \"FetchAsync\",\n \"CompareTo\",\n \"Dispose\",\n \"Deconstruct\"\n ],\n \"child_qualified_names\": [\n \"Person.MAX_AGE\",\n \"Person.Name\",\n \"Person.Age\",\n \"Person.Id\",\n \"Person.Greet\",\n \"Person.FetchAsync\",\n \"Person.CompareTo\",\n \"Person.Dispose\",\n \"Person.Deconstruct\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"IComparable<Person>, IDisposable\",\n \"decorator_text\": \"[Auditable(Level = 2)]\",\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 54,\n \"end_line_number\": 54,\n \"line_range\": [\n 54,\n 54\n ],\n \"text\": \"<summary>Maximum age constraint for validation.</summary>\",\n \"text_lines\": [\n \"<summary>Maximum age constraint for validation.</summary>\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"<summary>Instance counter tracking total allocations.</summary>\",\n \"text_lines\": [\n \"<summary>Instance counter tracking total allocations.</summary>\"\n ]\n },\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"<summary>Internal name storage with backing field.</summary>\",\n \"text_lines\": [\n \"<summary>Internal name storage with backing field.</summary>\"\n ]\n },\n {\n \"start_line_number\": 63,\n \"end_line_number\": 63,\n \"line_range\": [\n 63,\n 63\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 64,\n \"end_line_number\": 64,\n \"line_range\": [\n 64,\n 64\n ],\n \"text\": \"Full name with validation on set.\",\n \"text_lines\": [\n \"Full name with validation on set.\"\n ]\n },\n {\n \"start_line_number\": 65,\n \"end_line_number\": 65,\n \"line_range\": [\n 65,\n 65\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 66,\n \"end_line_number\": 66,\n \"line_range\": [\n 66,\n 66\n ],\n \"text\": \"<value>Non-null, non-empty person name.</value>\",\n \"text_lines\": [\n \"<value>Non-null, non-empty person name.</value>\"\n ]\n },\n {\n \"start_line_number\": 67,\n \"end_line_number\": 67,\n \"line_range\": [\n 67,\n 67\n ],\n \"text\": \"<exception cref=\\\"ArgumentException\\\">Thrown when value is empty.</exception>\",\n \"text_lines\": [\n \"<exception cref=\\\"ArgumentException\\\">Thrown when value is empty.</exception>\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 71,\n \"line_range\": [\n 71,\n 71\n ],\n \"text\": \"Validate non-empty name\",\n \"text_lines\": [\n \"Validate non-empty name\"\n ]\n },\n {\n \"start_line_number\": 78,\n \"end_line_number\": 78,\n \"line_range\": [\n 78,\n 78\n ],\n \"text\": \"<summary>Person's age with init-only setter.</summary>\",\n \"text_lines\": [\n \"<summary>Person's age with init-only setter.</summary>\"\n ]\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 81,\n \"line_range\": [\n 81,\n 81\n ],\n \"text\": \"<summary>Optional email address (nullable reference type).</summary>\",\n \"text_lines\": [\n \"<summary>Optional email address (nullable reference type).</summary>\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 84,\n \"line_range\": [\n 84,\n 84\n ],\n \"text\": \"<summary>Read-only unique identifier generated at construction.</summary>\",\n \"text_lines\": [\n \"<summary>Read-only unique identifier generated at construction.</summary>\"\n ]\n },\n {\n \"start_line_number\": 87,\n \"end_line_number\": 87,\n \"line_range\": [\n 87,\n 87\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 88,\n \"end_line_number\": 88,\n \"line_range\": [\n 88,\n 88\n ],\n \"text\": \"Event raised when person data changes.\",\n \"text_lines\": [\n \"Event raised when person data changes.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 89,\n \"line_range\": [\n 89,\n 89\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 92,\n \"end_line_number\": 92,\n \"line_range\": [\n 92,\n 92\n ],\n \"text\": \"@brief Construct a new Person with name and age.\",\n \"text_lines\": [\n \"@brief Construct a new Person with name and age.\"\n ]\n },\n {\n \"start_line_number\": 93,\n \"end_line_number\": 93,\n \"line_range\": [\n 93,\n 93\n ],\n \"text\": \"@details Initializes backing fields and updates instance counters.\",\n \"text_lines\": [\n \"@details Initializes backing fields and updates instance counters.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 94,\n \"line_range\": [\n 94,\n 94\n ],\n \"text\": \"@param name Display name (required).\",\n \"text_lines\": [\n \"@param name Display name (required).\"\n ]\n },\n {\n \"start_line_number\": 95,\n \"end_line_number\": 95,\n \"line_range\": [\n 95,\n 95\n ],\n \"text\": \"@param age Age in years (must be 0..MAX_AGE).\",\n \"text_lines\": [\n \"@param age Age in years (must be 0..MAX_AGE).\"\n ]\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 96,\n \"line_range\": [\n 96,\n 96\n ],\n \"text\": \"@return Constructed Person instance.\",\n \"text_lines\": [\n \"@return Constructed Person instance.\"\n ]\n },\n {\n \"start_line_number\": 103,\n \"end_line_number\": 103,\n \"line_range\": [\n 103,\n 103\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 104,\n \"line_range\": [\n 104,\n 104\n ],\n \"text\": \"Greet this person on the console.\",\n \"text_lines\": [\n \"Greet this person on the console.\"\n ]\n },\n {\n \"start_line_number\": 105,\n \"end_line_number\": 105,\n \"line_range\": [\n 105,\n 105\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 107,\n \"end_line_number\": 107,\n \"line_range\": [\n 107,\n 107\n ],\n \"text\": \"Fire data changed event\",\n \"text_lines\": [\n \"Fire data changed event\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"@brief Fetch person data asynchronously with cancellation support.\",\n \"text_lines\": [\n \"@brief Fetch person data asynchronously with cancellation support.\"\n ]\n },\n {\n \"start_line_number\": 113,\n \"end_line_number\": 113,\n \"line_range\": [\n 113,\n 113\n ],\n \"text\": \"@details Waits asynchronously and returns a deterministic payload.\",\n \"text_lines\": [\n \"@details Waits asynchronously and returns a deterministic payload.\"\n ]\n },\n {\n \"start_line_number\": 114,\n \"end_line_number\": 114,\n \"line_range\": [\n 114,\n 114\n ],\n \"text\": \"@param token Cancellation token for cooperative cancellation.\",\n \"text_lines\": [\n \"@param token Cancellation token for cooperative cancellation.\"\n ]\n },\n {\n \"start_line_number\": 115,\n \"end_line_number\": 115,\n \"line_range\": [\n 115,\n 115\n ],\n \"text\": \"@return Formatted data string.\",\n \"text_lines\": [\n \"@return Formatted data string.\"\n ]\n },\n {\n \"start_line_number\": 116,\n \"end_line_number\": 116,\n \"line_range\": [\n 116,\n 116\n ],\n \"text\": \"@details Supports cancellation through token propagation.\",\n \"text_lines\": [\n \"@details Supports cancellation through token propagation.\"\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 122,\n \"line_range\": [\n 122,\n 122\n ],\n \"text\": \"@brief Compare persons by age for sorting.\",\n \"text_lines\": [\n \"@brief Compare persons by age for sorting.\"\n ]\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 123,\n \"line_range\": [\n 123,\n 123\n ],\n \"text\": \"@details Implements IComparable ordering semantics.\",\n \"text_lines\": [\n \"@details Implements IComparable ordering semantics.\"\n ]\n },\n {\n \"start_line_number\": 124,\n \"end_line_number\": 124,\n \"line_range\": [\n 124,\n 124\n ],\n \"text\": \"@param other Person to compare with.\",\n \"text_lines\": [\n \"@param other Person to compare with.\"\n ]\n },\n {\n \"start_line_number\": 125,\n \"end_line_number\": 125,\n \"line_range\": [\n 125,\n 125\n ],\n \"text\": \"@return Comparison result: negative, zero, or positive.\",\n \"text_lines\": [\n \"@return Comparison result: negative, zero, or positive.\"\n ]\n },\n {\n \"start_line_number\": 126,\n \"end_line_number\": 126,\n \"line_range\": [\n 126,\n 126\n ],\n \"text\": \"@details Null values are ordered after non-null instances.\",\n \"text_lines\": [\n \"@details Null values are ordered after non-null instances.\"\n ]\n },\n {\n \"start_line_number\": 132,\n \"end_line_number\": 132,\n \"line_range\": [\n 132,\n 132\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 133,\n \"end_line_number\": 133,\n \"line_range\": [\n 133,\n 133\n ],\n \"text\": \"Dispose of managed resources.\",\n \"text_lines\": [\n \"Dispose of managed resources.\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 134,\n \"line_range\": [\n 134,\n 134\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"text\": \"Cleanup managed resources\",\n \"text_lines\": [\n \"Cleanup managed resources\"\n ]\n },\n {\n \"start_line_number\": 141,\n \"end_line_number\": 141,\n \"line_range\": [\n 141,\n 141\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 142,\n \"end_line_number\": 142,\n \"line_range\": [\n 142,\n 142\n ],\n \"text\": \"Indexer for accessing person properties by name.\",\n \"text_lines\": [\n \"Indexer for accessing person properties by name.\"\n ]\n },\n {\n \"start_line_number\": 143,\n \"end_line_number\": 143,\n \"line_range\": [\n 143,\n 143\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"text\": \"<param name=\\\"propertyName\\\">Name of the property to access.</param>\",\n \"text_lines\": [\n \"<param name=\\\"propertyName\\\">Name of the property to access.</param>\"\n ]\n },\n {\n \"start_line_number\": 145,\n \"end_line_number\": 145,\n \"line_range\": [\n 145,\n 145\n ],\n \"text\": \"<returns>Property value as object, or null.</returns>\",\n \"text_lines\": [\n \"<returns>Property value as object, or null.</returns>\"\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 157,\n \"line_range\": [\n 157,\n 157\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 158,\n \"end_line_number\": 158,\n \"line_range\": [\n 158,\n 158\n ],\n \"text\": \"Deconstruct for pattern matching support.\",\n \"text_lines\": [\n \"Deconstruct for pattern matching support.\"\n ]\n },\n {\n \"start_line_number\": 159,\n \"end_line_number\": 159,\n \"line_range\": [\n 159,\n 159\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 160,\n \"end_line_number\": 160,\n \"line_range\": [\n 160,\n 160\n ],\n \"text\": \"<param name=\\\"name\\\">Output: person name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Output: person name.</param>\"\n ]\n },\n {\n \"start_line_number\": 161,\n \"end_line_number\": 161,\n \"line_range\": [\n 161,\n 161\n ],\n \"text\": \"<param name=\\\"age\\\">Output: person age.</param>\",\n \"text_lines\": [\n \"<param name=\\\"age\\\">Output: person age.</param>\"\n ]\n },\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 168,\n \"end_line_number\": 168,\n \"line_range\": [\n 168,\n 168\n ],\n \"text\": \"Get total number of Person instances created.\",\n \"text_lines\": [\n \"Get total number of Person instances created.\"\n ]\n },\n {\n \"start_line_number\": 169,\n \"end_line_number\": 169,\n \"line_range\": [\n 169,\n 169\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 170,\n \"end_line_number\": 170,\n \"line_range\": [\n 170,\n 170\n ],\n \"text\": \"<returns>Instance count.</returns>\",\n \"text_lines\": [\n \"<returns>Instance count.</returns>\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 73,\n \"text\": \"throw new ArgumentException(\\\"Name cannot be empty\\\");\"\n },\n {\n \"line_number\": 119,\n \"text\": \"return \\\"data\\\";\"\n },\n {\n \"line_number\": 129,\n \"text\": \"return Age.CompareTo(other.Age);\"\n },\n {\n \"line_number\": 148,\n \"text\": \"return propertyName switch {\"\n }\n ]\n },\n {\n \"start_line_number\": 55,\n \"end_line_number\": 55,\n \"line_range\": [\n 55,\n 55\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"MAX_AGE\",\n \"qualified_name\": \"Person.MAX_AGE\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"public const int MAX_AGE = 150\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Maximum age constraint for validation.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Maximum age constraint for validation.</summary>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 68,\n \"end_line_number\": 68,\n \"line_range\": [\n 68,\n 68\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"Name\",\n \"qualified_name\": \"Person.Name\",\n \"symbol_kind\": \"PROPERTY\",\n \"type_label\": \"PROPERTY\",\n \"signature_text\": \"public string Name\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\",\n \"<value>Non-null, non-empty person name.</value>\",\n \"<exception cref=\\\"ArgumentException\\\">Thrown when value is empty.</exception>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 79,\n \"end_line_number\": 79,\n \"line_range\": [\n 79,\n 79\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"Age\",\n \"qualified_name\": \"Person.Age\",\n \"symbol_kind\": \"PROPERTY\",\n \"type_label\": \"PROPERTY\",\n \"signature_text\": \"public int Age { get; init; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Person's age with init-only setter.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Person's age with init-only setter.</summary>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 85,\n \"end_line_number\": 85,\n \"line_range\": [\n 85,\n 85\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"Id\",\n \"qualified_name\": \"Person.Id\",\n \"symbol_kind\": \"PROPERTY\",\n \"type_label\": \"PROPERTY\",\n \"signature_text\": \"public Guid Id { get; } = Guid.NewGuid()\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Read-only unique identifier generated at construction.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Read-only unique identifier generated at construction.</summary>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 97,\n \"end_line_number\": 101,\n \"line_range\": [\n 97,\n 101\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"Person\",\n \"qualified_name\": \"Person\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public Person(string name, int age)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"child_symbol_names\": [\n \"MAX_AGE\",\n \"Name\",\n \"Age\",\n \"Id\",\n \"Greet\",\n \"FetchAsync\",\n \"CompareTo\",\n \"Dispose\",\n \"Deconstruct\"\n ],\n \"child_qualified_names\": [\n \"Person.MAX_AGE\",\n \"Person.Name\",\n \"Person.Age\",\n \"Person.Id\",\n \"Person.Greet\",\n \"Person.FetchAsync\",\n \"Person.CompareTo\",\n \"Person.Dispose\",\n \"Person.Deconstruct\"\n ],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Construct a new Person with name and age.\",\n \"doxygen\": {\n \"brief\": [\n \"Construct a new Person with name and age.\"\n ],\n \"details\": [\n \"Initializes backing fields and updates instance counters.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"description\": \"Display name (required).\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"age\",\n \"description\": \"Age in years (must be 0..MAX_AGE).\"\n }\n ],\n \"returns\": [\n \"Constructed Person instance.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 106,\n \"end_line_number\": 110,\n \"line_range\": [\n 106,\n 110\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"Greet\",\n \"qualified_name\": \"Person.Greet\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public void Greet()\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>\",\n \"attached_comment_lines\": [\n \"<summary>\",\n \"Greet this person on the console.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 107,\n \"end_line_number\": 107,\n \"line_range\": [\n 107,\n 107\n ],\n \"text\": \"Fire data changed event\",\n \"text_lines\": [\n \"Fire data changed event\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 117,\n \"end_line_number\": 120,\n \"line_range\": [\n 117,\n 120\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"FetchAsync\",\n \"qualified_name\": \"Person.FetchAsync\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static async Task<string> FetchAsync(CancellationToken token = default)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Fetch person data asynchronously with cancellation support.\",\n \"doxygen\": {\n \"brief\": [\n \"Fetch person data asynchronously with cancellation support.\"\n ],\n \"details\": [\n \"Waits asynchronously and returns a deterministic payload.\",\n \"Supports cancellation through token propagation.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"token\",\n \"description\": \"Cancellation token for cooperative cancellation.\"\n }\n ],\n \"returns\": [\n \"Formatted data string.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 119,\n \"text\": \"return \\\"data\\\";\"\n }\n ]\n },\n {\n \"start_line_number\": 127,\n \"end_line_number\": 130,\n \"line_range\": [\n 127,\n 130\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"CompareTo\",\n \"qualified_name\": \"Person.CompareTo\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public int CompareTo(Person? other)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Compare persons by age for sorting.\",\n \"doxygen\": {\n \"brief\": [\n \"Compare persons by age for sorting.\"\n ],\n \"details\": [\n \"Implements IComparable ordering semantics.\",\n \"Null values are ordered after non-null instances.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"Person to compare with.\"\n }\n ],\n \"returns\": [\n \"Comparison result: negative, zero, or positive.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 129,\n \"text\": \"return Age.CompareTo(other.Age);\"\n }\n ]\n },\n {\n \"start_line_number\": 135,\n \"end_line_number\": 139,\n \"line_range\": [\n 135,\n 139\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"Dispose\",\n \"qualified_name\": \"Person.Dispose\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public void Dispose()\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>\",\n \"attached_comment_lines\": [\n \"<summary>\",\n \"Dispose of managed resources.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"text\": \"Cleanup managed resources\",\n \"text_lines\": [\n \"Cleanup managed resources\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 162,\n \"end_line_number\": 165,\n \"line_range\": [\n 162,\n 165\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"Deconstruct\",\n \"qualified_name\": \"Person.Deconstruct\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public void Deconstruct(out string name, out int age)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Person\",\n \"parent_qualified_name\": \"Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\",\n \"<param name=\\\"name\\\">Output: person name.</param>\",\n \"<param name=\\\"age\\\">Output: person age.</param>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 171,\n \"end_line_number\": 179,\n \"line_range\": [\n 171,\n 179\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"GetInstanceCount\",\n \"qualified_name\": \"MyApp.GetInstanceCount\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static int GetInstanceCount() => _instanceCount\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyApp\",\n \"parent_qualified_name\": \"MyApp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Get total number of Person instances created.\",\n \"attached_comment_lines\": [\n \"Get total number of Person instances created.\",\n \"</summary>\",\n \"<returns>Instance count.</returns>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 174,\n \"end_line_number\": 174,\n \"line_range\": [\n 174,\n 174\n ],\n \"text\": \"── Interface ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Interface ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 176,\n \"end_line_number\": 176,\n \"line_range\": [\n 176,\n 176\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 177,\n \"end_line_number\": 177,\n \"line_range\": [\n 177,\n 177\n ],\n \"text\": \"Interface for greeting operations with default implementation.\",\n \"text_lines\": [\n \"Interface for greeting operations with default implementation.\"\n ]\n },\n {\n \"start_line_number\": 178,\n \"end_line_number\": 178,\n \"line_range\": [\n 178,\n 178\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 179,\n \"end_line_number\": 193,\n \"line_range\": [\n 179,\n 193\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"IGreeter\",\n \"qualified_name\": \"IGreeter\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"public interface IGreeter\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"SayHello\",\n \"SayGoodbye\"\n ],\n \"child_qualified_names\": [\n \"IGreeter.SayHello\",\n \"IGreeter.SayGoodbye\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"<summary>\",\n \"attached_comment_lines\": [\n \"<summary>\",\n \"Interface for greeting operations with default implementation.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 180,\n \"end_line_number\": 180,\n \"line_range\": [\n 180,\n 180\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 181,\n \"end_line_number\": 181,\n \"line_range\": [\n 181,\n 181\n ],\n \"text\": \"Say hello to a named person.\",\n \"text_lines\": [\n \"Say hello to a named person.\"\n ]\n },\n {\n \"start_line_number\": 182,\n \"end_line_number\": 182,\n \"line_range\": [\n 182,\n 182\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 183,\n \"end_line_number\": 183,\n \"line_range\": [\n 183,\n 183\n ],\n \"text\": \"<param name=\\\"name\\\">Person's name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ]\n },\n {\n \"start_line_number\": 186,\n \"end_line_number\": 186,\n \"line_range\": [\n 186,\n 186\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"Default farewell implementation.\",\n \"text_lines\": [\n \"Default farewell implementation.\"\n ]\n },\n {\n \"start_line_number\": 188,\n \"end_line_number\": 188,\n \"line_range\": [\n 188,\n 188\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 189,\n \"line_range\": [\n 189,\n 189\n ],\n \"text\": \"<param name=\\\"name\\\">Person's name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 184,\n \"end_line_number\": 192,\n \"line_range\": [\n 184,\n 192\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"SayHello\",\n \"qualified_name\": \"IGreeter.SayHello\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"void SayHello(string name)\",\n \"parent_symbol_name\": \"IGreeter\",\n \"parent_qualified_name\": \"IGreeter\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Say hello to a named person.\",\n \"attached_comment_lines\": [\n \"Say hello to a named person.\",\n \"</summary>\",\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 186,\n \"end_line_number\": 186,\n \"line_range\": [\n 186,\n 186\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"Default farewell implementation.\",\n \"text_lines\": [\n \"Default farewell implementation.\"\n ]\n },\n {\n \"start_line_number\": 188,\n \"end_line_number\": 188,\n \"line_range\": [\n 188,\n 188\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 189,\n \"line_range\": [\n 189,\n 189\n ],\n \"text\": \"<param name=\\\"name\\\">Person's name.</param>\",\n \"text_lines\": [\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 190,\n \"end_line_number\": 192,\n \"line_range\": [\n 190,\n 192\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"SayGoodbye\",\n \"qualified_name\": \"IGreeter.SayGoodbye\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"void SayGoodbye(string name)\",\n \"parent_symbol_name\": \"IGreeter\",\n \"parent_qualified_name\": \"IGreeter\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Default farewell implementation.\",\n \"attached_comment_lines\": [\n \"Default farewell implementation.\",\n \"</summary>\",\n \"<param name=\\\"name\\\">Person's name.</param>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 199,\n \"end_line_number\": 208,\n \"line_range\": [\n 199,\n 208\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"IRepository\",\n \"qualified_name\": \"IRepository\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"public interface IRepository<T> where T : class, new()\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Generic repository interface with covariant type parameter.\",\n \"attached_comment_lines\": [\n \"Generic repository interface with covariant type parameter.\",\n \"</summary>\",\n \"<typeparam name=\\\"T\\\">Entity type, must be a class with parameterless ctor.</typeparam>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 200,\n \"end_line_number\": 200,\n \"line_range\": [\n 200,\n 200\n ],\n \"text\": \"<summary>Find entity by ID.</summary>\",\n \"text_lines\": [\n \"<summary>Find entity by ID.</summary>\"\n ]\n },\n {\n \"start_line_number\": 203,\n \"end_line_number\": 203,\n \"line_range\": [\n 203,\n 203\n ],\n \"text\": \"<summary>Get all entities as async stream.</summary>\",\n \"text_lines\": [\n \"<summary>Get all entities as async stream.</summary>\"\n ]\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 206,\n \"line_range\": [\n 206,\n 206\n ],\n \"text\": \"<summary>Save an entity.</summary>\",\n \"text_lines\": [\n \"<summary>Save an entity.</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 201,\n \"end_line_number\": 215,\n \"line_range\": [\n 201,\n 215\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"FindByIdAsync\",\n \"qualified_name\": \"MyApp.FindByIdAsync\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"Task<T?> FindByIdAsync(int id)\",\n \"parent_symbol_name\": \"MyApp\",\n \"parent_qualified_name\": \"MyApp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Find entity by ID.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Find entity by ID.</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 203,\n \"end_line_number\": 203,\n \"line_range\": [\n 203,\n 203\n ],\n \"text\": \"<summary>Get all entities as async stream.</summary>\",\n \"text_lines\": [\n \"<summary>Get all entities as async stream.</summary>\"\n ]\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 206,\n \"line_range\": [\n 206,\n 206\n ],\n \"text\": \"<summary>Save an entity.</summary>\",\n \"text_lines\": [\n \"<summary>Save an entity.</summary>\"\n ]\n },\n {\n \"start_line_number\": 210,\n \"end_line_number\": 210,\n \"line_range\": [\n 210,\n 210\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 212,\n \"end_line_number\": 212,\n \"line_range\": [\n 212,\n 212\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 213,\n \"end_line_number\": 213,\n \"line_range\": [\n 213,\n 213\n ],\n \"text\": \"Immutable 2D point struct with operator overloading.\",\n \"text_lines\": [\n \"Immutable 2D point struct with operator overloading.\"\n ]\n },\n {\n \"start_line_number\": 214,\n \"end_line_number\": 214,\n \"line_range\": [\n 214,\n 214\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 204,\n \"end_line_number\": 215,\n \"line_range\": [\n 204,\n 215\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"GetAllAsync\",\n \"qualified_name\": \"MyApp.GetAllAsync\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"IAsyncEnumerable<T> GetAllAsync(CancellationToken token = default)\",\n \"parent_symbol_name\": \"MyApp\",\n \"parent_qualified_name\": \"MyApp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Get all entities as async stream.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Get all entities as async stream.</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 206,\n \"end_line_number\": 206,\n \"line_range\": [\n 206,\n 206\n ],\n \"text\": \"<summary>Save an entity.</summary>\",\n \"text_lines\": [\n \"<summary>Save an entity.</summary>\"\n ]\n },\n {\n \"start_line_number\": 210,\n \"end_line_number\": 210,\n \"line_range\": [\n 210,\n 210\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 212,\n \"end_line_number\": 212,\n \"line_range\": [\n 212,\n 212\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 213,\n \"end_line_number\": 213,\n \"line_range\": [\n 213,\n 213\n ],\n \"text\": \"Immutable 2D point struct with operator overloading.\",\n \"text_lines\": [\n \"Immutable 2D point struct with operator overloading.\"\n ]\n },\n {\n \"start_line_number\": 214,\n \"end_line_number\": 214,\n \"line_range\": [\n 214,\n 214\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 207,\n \"end_line_number\": 215,\n \"line_range\": [\n 207,\n 215\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"SaveAsync\",\n \"qualified_name\": \"MyApp.SaveAsync\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"Task<bool> SaveAsync(T entity)\",\n \"parent_symbol_name\": \"MyApp\",\n \"parent_qualified_name\": \"MyApp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Save an entity.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Save an entity.</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 210,\n \"end_line_number\": 210,\n \"line_range\": [\n 210,\n 210\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 212,\n \"end_line_number\": 212,\n \"line_range\": [\n 212,\n 212\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 213,\n \"end_line_number\": 213,\n \"line_range\": [\n 213,\n 213\n ],\n \"text\": \"Immutable 2D point struct with operator overloading.\",\n \"text_lines\": [\n \"Immutable 2D point struct with operator overloading.\"\n ]\n },\n {\n \"start_line_number\": 214,\n \"end_line_number\": 214,\n \"line_range\": [\n 214,\n 214\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 230,\n \"line_range\": [\n 215,\n 230\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"Point\",\n \"qualified_name\": \"Point\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"public readonly struct Point\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"X\",\n \"Y\"\n ],\n \"child_qualified_names\": [\n \"Point.X\",\n \"Point.Y\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"<summary>\",\n \"attached_comment_lines\": [\n \"<summary>\",\n \"Immutable 2D point struct with operator overloading.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 216,\n \"end_line_number\": 216,\n \"line_range\": [\n 216,\n 216\n ],\n \"text\": \"<summary>Horizontal coordinate.</summary>\",\n \"text_lines\": [\n \"<summary>Horizontal coordinate.</summary>\"\n ]\n },\n {\n \"start_line_number\": 218,\n \"end_line_number\": 218,\n \"line_range\": [\n 218,\n 218\n ],\n \"text\": \"<summary>Vertical coordinate.</summary>\",\n \"text_lines\": [\n \"<summary>Vertical coordinate.</summary>\"\n ]\n },\n {\n \"start_line_number\": 221,\n \"end_line_number\": 221,\n \"line_range\": [\n 221,\n 221\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 222,\n \"end_line_number\": 222,\n \"line_range\": [\n 222,\n 222\n ],\n \"text\": \"Add two points component-wise.\",\n \"text_lines\": [\n \"Add two points component-wise.\"\n ]\n },\n {\n \"start_line_number\": 223,\n \"end_line_number\": 223,\n \"line_range\": [\n 223,\n 223\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 226,\n \"end_line_number\": 226,\n \"line_range\": [\n 226,\n 226\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 227,\n \"end_line_number\": 227,\n \"line_range\": [\n 227,\n 227\n ],\n \"text\": \"Compute distance from origin.\",\n \"text_lines\": [\n \"Compute distance from origin.\"\n ]\n },\n {\n \"start_line_number\": 228,\n \"end_line_number\": 228,\n \"line_range\": [\n 228,\n 228\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 217,\n \"end_line_number\": 217,\n \"line_range\": [\n 217,\n 217\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"X\",\n \"qualified_name\": \"Point.X\",\n \"symbol_kind\": \"PROPERTY\",\n \"type_label\": \"PROPERTY\",\n \"signature_text\": \"public double X { get; init; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Point\",\n \"parent_qualified_name\": \"Point\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Horizontal coordinate.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Horizontal coordinate.</summary>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 219,\n \"end_line_number\": 219,\n \"line_range\": [\n 219,\n 219\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"Y\",\n \"qualified_name\": \"Point.Y\",\n \"symbol_kind\": \"PROPERTY\",\n \"type_label\": \"PROPERTY\",\n \"signature_text\": \"public double Y { get; init; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Point\",\n \"parent_qualified_name\": \"Point\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<summary>Vertical coordinate.</summary>\",\n \"attached_comment_lines\": [\n \"<summary>Vertical coordinate.</summary>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 238,\n \"end_line_number\": 249,\n \"line_range\": [\n 238,\n 249\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"Color\",\n \"qualified_name\": \"Color\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"public enum Color\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"[Flags]\",\n \"attached_comment_summary_text\": \"Color flags enum supporting bitwise combinations.\",\n \"attached_comment_lines\": [\n \"Color flags enum supporting bitwise combinations.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 239,\n \"end_line_number\": 239,\n \"line_range\": [\n 239,\n 239\n ],\n \"text\": \"<summary>No color selected.</summary>\",\n \"text_lines\": [\n \"<summary>No color selected.</summary>\"\n ]\n },\n {\n \"start_line_number\": 241,\n \"end_line_number\": 241,\n \"line_range\": [\n 241,\n 241\n ],\n \"text\": \"<summary>Red channel.</summary>\",\n \"text_lines\": [\n \"<summary>Red channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 243,\n \"end_line_number\": 243,\n \"line_range\": [\n 243,\n 243\n ],\n \"text\": \"<summary>Green channel.</summary>\",\n \"text_lines\": [\n \"<summary>Green channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 245,\n \"end_line_number\": 245,\n \"line_range\": [\n 245,\n 245\n ],\n \"text\": \"<summary>Blue channel.</summary>\",\n \"text_lines\": [\n \"<summary>Blue channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 247,\n \"line_range\": [\n 247,\n 247\n ],\n \"text\": \"<summary>All channels combined.</summary>\",\n \"text_lines\": [\n \"<summary>All channels combined.</summary>\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 258,\n \"end_line_number\": 292,\n \"line_range\": [\n 258,\n 292\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"ConfigEntry\",\n \"qualified_name\": \"MyApp.ConfigEntry\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public record ConfigEntry(string Key, string Value)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyApp\",\n \"parent_qualified_name\": \"MyApp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\",\n \"<param name=\\\"Key\\\">Configuration key.</param>\",\n \"<param name=\\\"Value\\\">Configuration value.</param>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 260,\n \"end_line_number\": 260,\n \"line_range\": [\n 260,\n 260\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 261,\n \"end_line_number\": 261,\n \"line_range\": [\n 261,\n 261\n ],\n \"text\": \"Record struct for lightweight value records (C# 10).\",\n \"text_lines\": [\n \"Record struct for lightweight value records (C# 10).\"\n ]\n },\n {\n \"start_line_number\": 262,\n \"end_line_number\": 262,\n \"line_range\": [\n 262,\n 262\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 263,\n \"end_line_number\": 263,\n \"line_range\": [\n 263,\n 263\n ],\n \"text\": \"<param name=\\\"X\\\">X coordinate.</param>\",\n \"text_lines\": [\n \"<param name=\\\"X\\\">X coordinate.</param>\"\n ]\n },\n {\n \"start_line_number\": 264,\n \"end_line_number\": 264,\n \"line_range\": [\n 264,\n 264\n ],\n \"text\": \"<param name=\\\"Y\\\">Y coordinate.</param>\",\n \"text_lines\": [\n \"<param name=\\\"Y\\\">Y coordinate.</param>\"\n ]\n },\n {\n \"start_line_number\": 267,\n \"end_line_number\": 267,\n \"line_range\": [\n 267,\n 267\n ],\n \"text\": \"── Extension methods ──────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Extension methods ──────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 269,\n \"end_line_number\": 269,\n \"line_range\": [\n 269,\n 269\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 270,\n \"end_line_number\": 270,\n \"line_range\": [\n 270,\n 270\n ],\n \"text\": \"Extension methods for string manipulation.\",\n \"text_lines\": [\n \"Extension methods for string manipulation.\"\n ]\n },\n {\n \"start_line_number\": 271,\n \"end_line_number\": 271,\n \"line_range\": [\n 271,\n 271\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 273,\n \"end_line_number\": 273,\n \"line_range\": [\n 273,\n 273\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 274,\n \"end_line_number\": 274,\n \"line_range\": [\n 274,\n 274\n ],\n \"text\": \"Truncate a string to the specified maximum length.\",\n \"text_lines\": [\n \"Truncate a string to the specified maximum length.\"\n ]\n },\n {\n \"start_line_number\": 275,\n \"end_line_number\": 275,\n \"line_range\": [\n 275,\n 275\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"<param name=\\\"str\\\">Source string.</param>\",\n \"text_lines\": [\n \"<param name=\\\"str\\\">Source string.</param>\"\n ]\n },\n {\n \"start_line_number\": 277,\n \"end_line_number\": 277,\n \"line_range\": [\n 277,\n 277\n ],\n \"text\": \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\",\n \"text_lines\": [\n \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\"\n ]\n },\n {\n \"start_line_number\": 278,\n \"end_line_number\": 278,\n \"line_range\": [\n 278,\n 278\n ],\n \"text\": \"<returns>Truncated string with ellipsis if shortened.</returns>\",\n \"text_lines\": [\n \"<returns>Truncated string with ellipsis if shortened.</returns>\"\n ]\n },\n {\n \"start_line_number\": 284,\n \"end_line_number\": 284,\n \"line_range\": [\n 284,\n 284\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 285,\n \"line_range\": [\n 285,\n 285\n ],\n \"text\": \"Check if a string contains only ASCII characters.\",\n \"text_lines\": [\n \"Check if a string contains only ASCII characters.\"\n ]\n },\n {\n \"start_line_number\": 286,\n \"end_line_number\": 286,\n \"line_range\": [\n 286,\n 286\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 287,\n \"end_line_number\": 287,\n \"line_range\": [\n 287,\n 287\n ],\n \"text\": \"<param name=\\\"str\\\">The string to check.</param>\",\n \"text_lines\": [\n \"<param name=\\\"str\\\">The string to check.</param>\"\n ]\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 288,\n \"line_range\": [\n 288,\n 288\n ],\n \"text\": \"<returns>True if all characters are ASCII.</returns>\",\n \"text_lines\": [\n \"<returns>True if all characters are ASCII.</returns>\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 281,\n \"text\": \"return str[..maxLength] + \\\"...\\\";\"\n },\n {\n \"line_number\": 290,\n \"text\": \"return str.All(c => c < 128);\"\n }\n ]\n },\n {\n \"start_line_number\": 272,\n \"end_line_number\": 292,\n \"line_range\": [\n 272,\n 292\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"StringExtensions\",\n \"qualified_name\": \"StringExtensions\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"public static class StringExtensions\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"Truncate\",\n \"IsAscii\"\n ],\n \"child_qualified_names\": [\n \"StringExtensions.Truncate\",\n \"StringExtensions.IsAscii\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"<summary>\",\n \"attached_comment_lines\": [\n \"<summary>\",\n \"Extension methods for string manipulation.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 273,\n \"end_line_number\": 273,\n \"line_range\": [\n 273,\n 273\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 274,\n \"end_line_number\": 274,\n \"line_range\": [\n 274,\n 274\n ],\n \"text\": \"Truncate a string to the specified maximum length.\",\n \"text_lines\": [\n \"Truncate a string to the specified maximum length.\"\n ]\n },\n {\n \"start_line_number\": 275,\n \"end_line_number\": 275,\n \"line_range\": [\n 275,\n 275\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"<param name=\\\"str\\\">Source string.</param>\",\n \"text_lines\": [\n \"<param name=\\\"str\\\">Source string.</param>\"\n ]\n },\n {\n \"start_line_number\": 277,\n \"end_line_number\": 277,\n \"line_range\": [\n 277,\n 277\n ],\n \"text\": \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\",\n \"text_lines\": [\n \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\"\n ]\n },\n {\n \"start_line_number\": 278,\n \"end_line_number\": 278,\n \"line_range\": [\n 278,\n 278\n ],\n \"text\": \"<returns>Truncated string with ellipsis if shortened.</returns>\",\n \"text_lines\": [\n \"<returns>Truncated string with ellipsis if shortened.</returns>\"\n ]\n },\n {\n \"start_line_number\": 284,\n \"end_line_number\": 284,\n \"line_range\": [\n 284,\n 284\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 285,\n \"line_range\": [\n 285,\n 285\n ],\n \"text\": \"Check if a string contains only ASCII characters.\",\n \"text_lines\": [\n \"Check if a string contains only ASCII characters.\"\n ]\n },\n {\n \"start_line_number\": 286,\n \"end_line_number\": 286,\n \"line_range\": [\n 286,\n 286\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 287,\n \"end_line_number\": 287,\n \"line_range\": [\n 287,\n 287\n ],\n \"text\": \"<param name=\\\"str\\\">The string to check.</param>\",\n \"text_lines\": [\n \"<param name=\\\"str\\\">The string to check.</param>\"\n ]\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 288,\n \"line_range\": [\n 288,\n 288\n ],\n \"text\": \"<returns>True if all characters are ASCII.</returns>\",\n \"text_lines\": [\n \"<returns>True if all characters are ASCII.</returns>\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 281,\n \"text\": \"return str[..maxLength] + \\\"...\\\";\"\n },\n {\n \"line_number\": 290,\n \"text\": \"return str.All(c => c < 128);\"\n }\n ]\n },\n {\n \"start_line_number\": 279,\n \"end_line_number\": 282,\n \"line_range\": [\n 279,\n 282\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"Truncate\",\n \"qualified_name\": \"StringExtensions.Truncate\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static string Truncate(this string str, int maxLength)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"StringExtensions\",\n \"parent_qualified_name\": \"StringExtensions\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"<param name=\\\"str\\\">Source string.</param>\",\n \"attached_comment_lines\": [\n \"<param name=\\\"str\\\">Source string.</param>\",\n \"<param name=\\\"maxLength\\\">Maximum characters to keep.</param>\",\n \"<returns>Truncated string with ellipsis if shortened.</returns>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 281,\n \"text\": \"return str[..maxLength] + \\\"...\\\";\"\n }\n ]\n },\n {\n \"start_line_number\": 289,\n \"end_line_number\": 291,\n \"line_range\": [\n 289,\n 291\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"IsAscii\",\n \"qualified_name\": \"StringExtensions.IsAscii\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static bool IsAscii(this string str)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"StringExtensions\",\n \"parent_qualified_name\": \"StringExtensions\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\",\n \"<param name=\\\"str\\\">The string to check.</param>\",\n \"<returns>True if all characters are ASCII.</returns>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 290,\n \"text\": \"return str.All(c => c < 128);\"\n }\n ]\n },\n {\n \"start_line_number\": 300,\n \"end_line_number\": 322,\n \"line_range\": [\n 300,\n 322\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"SortedCollection\",\n \"qualified_name\": \"SortedCollection\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"public class SortedCollection<T> where T : IComparable<T>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"Add\",\n \"Where\"\n ],\n \"child_qualified_names\": [\n \"SortedCollection.Add\",\n \"SortedCollection.Where\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Generic collection with filtering and transformation support.\",\n \"attached_comment_lines\": [\n \"Generic collection with filtering and transformation support.\",\n \"</summary>\",\n \"<typeparam name=\\\"T\\\">Element type, must be comparable.</typeparam>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 303,\n \"end_line_number\": 303,\n \"line_range\": [\n 303,\n 303\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 304,\n \"end_line_number\": 304,\n \"line_range\": [\n 304,\n 304\n ],\n \"text\": \"Add an item maintaining sorted order.\",\n \"text_lines\": [\n \"Add an item maintaining sorted order.\"\n ]\n },\n {\n \"start_line_number\": 305,\n \"end_line_number\": 305,\n \"line_range\": [\n 305,\n 305\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 306,\n \"end_line_number\": 306,\n \"line_range\": [\n 306,\n 306\n ],\n \"text\": \"<param name=\\\"item\\\">Item to insert.</param>\",\n \"text_lines\": [\n \"<param name=\\\"item\\\">Item to insert.</param>\"\n ]\n },\n {\n \"start_line_number\": 308,\n \"end_line_number\": 308,\n \"line_range\": [\n 308,\n 308\n ],\n \"text\": \"Binary search for insertion point\",\n \"text_lines\": [\n \"Binary search for insertion point\"\n ]\n },\n {\n \"start_line_number\": 314,\n \"end_line_number\": 314,\n \"line_range\": [\n 314,\n 314\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 315,\n \"end_line_number\": 315,\n \"line_range\": [\n 315,\n 315\n ],\n \"text\": \"Get items matching a predicate using LINQ.\",\n \"text_lines\": [\n \"Get items matching a predicate using LINQ.\"\n ]\n },\n {\n \"start_line_number\": 316,\n \"end_line_number\": 316,\n \"line_range\": [\n 316,\n 316\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 317,\n \"end_line_number\": 317,\n \"line_range\": [\n 317,\n 317\n ],\n \"text\": \"<param name=\\\"predicate\\\">Filter condition.</param>\",\n \"text_lines\": [\n \"<param name=\\\"predicate\\\">Filter condition.</param>\"\n ]\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"text\": \"<returns>Filtered enumerable.</returns>\",\n \"text_lines\": [\n \"<returns>Filtered enumerable.</returns>\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 320,\n \"text\": \"return _items.Where(predicate);\"\n }\n ]\n },\n {\n \"start_line_number\": 307,\n \"end_line_number\": 312,\n \"line_range\": [\n 307,\n 312\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"Add\",\n \"qualified_name\": \"SortedCollection.Add\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public void Add(T item)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"SortedCollection\",\n \"parent_qualified_name\": \"SortedCollection\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Add an item maintaining sorted order.\",\n \"attached_comment_lines\": [\n \"Add an item maintaining sorted order.\",\n \"</summary>\",\n \"<param name=\\\"item\\\">Item to insert.</param>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 308,\n \"end_line_number\": 308,\n \"line_range\": [\n 308,\n 308\n ],\n \"text\": \"Binary search for insertion point\",\n \"text_lines\": [\n \"Binary search for insertion point\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 319,\n \"end_line_number\": 321,\n \"line_range\": [\n 319,\n 321\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"Where\",\n \"qualified_name\": \"SortedCollection.Where\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public IEnumerable<T> Where(Func<T, bool> predicate)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"SortedCollection\",\n \"parent_qualified_name\": \"SortedCollection\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\",\n \"<param name=\\\"predicate\\\">Filter condition.</param>\",\n \"<returns>Filtered enumerable.</returns>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 320,\n \"text\": \"return _items.Where(predicate);\"\n }\n ]\n },\n {\n \"start_line_number\": 329,\n \"end_line_number\": 347,\n \"line_range\": [\n 329,\n 347\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"PatternMatcher\",\n \"qualified_name\": \"PatternMatcher\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"public static class PatternMatcher\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"Describe\"\n ],\n \"child_qualified_names\": [\n \"PatternMatcher.Describe\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"<summary>\",\n \"attached_comment_lines\": [\n \"<summary>\",\n \"Utility class demonstrating advanced pattern matching.\",\n \"</summary>\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 330,\n \"end_line_number\": 330,\n \"line_range\": [\n 330,\n 330\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 331,\n \"end_line_number\": 331,\n \"line_range\": [\n 331,\n 331\n ],\n \"text\": \"Describe any object using C# pattern matching expressions.\",\n \"text_lines\": [\n \"Describe any object using C# pattern matching expressions.\"\n ]\n },\n {\n \"start_line_number\": 332,\n \"end_line_number\": 332,\n \"line_range\": [\n 332,\n 332\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 333,\n \"end_line_number\": 333,\n \"line_range\": [\n 333,\n 333\n ],\n \"text\": \"<param name=\\\"obj\\\">Object to describe.</param>\",\n \"text_lines\": [\n \"<param name=\\\"obj\\\">Object to describe.</param>\"\n ]\n },\n {\n \"start_line_number\": 334,\n \"end_line_number\": 334,\n \"line_range\": [\n 334,\n 334\n ],\n \"text\": \"<returns>Description string.</returns>\",\n \"text_lines\": [\n \"<returns>Description string.</returns>\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 336,\n \"text\": \"return obj switch {\"\n }\n ]\n },\n {\n \"start_line_number\": 335,\n \"end_line_number\": 346,\n \"line_range\": [\n 335,\n 346\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"Describe\",\n \"qualified_name\": \"PatternMatcher.Describe\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static string Describe(object? obj)\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"PatternMatcher\",\n \"parent_qualified_name\": \"PatternMatcher\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"</summary>\",\n \"attached_comment_lines\": [\n \"</summary>\",\n \"<param name=\\\"obj\\\">Object to describe.</param>\",\n \"<returns>Description string.</returns>\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 336,\n \"text\": \"return obj switch {\"\n }\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"MyApp.Services\",\n \"qualified_name\": \"MyApp.Services\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace MyApp.Services {}\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"coverage extension block\",\n \"attached_comment_lines\": [\n \"coverage extension block\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 353,\n \"end_line_number\": 353,\n \"line_range\": [\n 353,\n 353\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"MyApp.Core\",\n \"qualified_name\": \"MyApp.Core\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace MyApp.Core {}\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 354,\n \"end_line_number\": 354,\n \"line_range\": [\n 354,\n 354\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"MyApp.Data\",\n \"qualified_name\": \"MyApp.Data\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace MyApp.Data {}\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 355,\n \"end_line_number\": 355,\n \"line_range\": [\n 355,\n 355\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"MyApp.Api\",\n \"qualified_name\": \"MyApp.Api\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace MyApp.Api {}\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 356,\n \"end_line_number\": 356,\n \"line_range\": [\n 356,\n 356\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"ILogger\",\n \"qualified_name\": \"ILogger\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"public interface ILogger {}\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 357,\n \"end_line_number\": 357,\n \"line_range\": [\n 357,\n 357\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"IParser\",\n \"qualified_name\": \"IParser\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"public interface IParser {}\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 358,\n \"end_line_number\": 358,\n \"line_range\": [\n 358,\n 358\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"IRunner\",\n \"qualified_name\": \"IRunner\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"public interface IRunner {}\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 359,\n \"end_line_number\": 359,\n \"line_range\": [\n 359,\n 359\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"ModeCs\",\n \"qualified_name\": \"ModeCs\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"public enum ModeCs { Fast, Safe }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 360,\n \"end_line_number\": 360,\n \"line_range\": [\n 360,\n 360\n ],\n \"declaration_order_index\": 43,\n \"symbol_name\": \"PhaseCs\",\n \"qualified_name\": \"PhaseCs\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"public enum PhaseCs { Init, Done }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 361,\n \"end_line_number\": 361,\n \"line_range\": [\n 361,\n 361\n ],\n \"declaration_order_index\": 44,\n \"symbol_name\": \"StateCs\",\n \"qualified_name\": \"StateCs\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"public enum StateCs { Open, Closed }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 362,\n \"end_line_number\": 362,\n \"line_range\": [\n 362,\n 362\n ],\n \"declaration_order_index\": 45,\n \"symbol_name\": \"SignalCs\",\n \"qualified_name\": \"SignalCs\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"public enum SignalCs { On, Off }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 363,\n \"end_line_number\": 363,\n \"line_range\": [\n 363,\n 363\n ],\n \"declaration_order_index\": 46,\n \"symbol_name\": \"Size\",\n \"qualified_name\": \"Size\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"public struct Size { public int W; public int H; }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 364,\n \"end_line_number\": 364,\n \"line_range\": [\n 364,\n 364\n ],\n \"declaration_order_index\": 47,\n \"symbol_name\": \"Vector\",\n \"qualified_name\": \"Vector\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"public readonly struct Vector { public readonly int X; public readonly int Y; }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 365,\n \"end_line_number\": 365,\n \"line_range\": [\n 365,\n 365\n ],\n \"declaration_order_index\": 48,\n \"symbol_name\": \"Limits\",\n \"qualified_name\": \"Limits\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"public struct Limits { public int Max; }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 366,\n \"end_line_number\": 366,\n \"line_range\": [\n 366,\n 366\n ],\n \"declaration_order_index\": 49,\n \"symbol_name\": \"Cursor\",\n \"qualified_name\": \"Cursor\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"public struct Cursor { public int Index; }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 368,\n \"end_line_number\": 368,\n \"line_range\": [\n 368,\n 368\n ],\n \"declaration_order_index\": 50,\n \"symbol_name\": \"MIN_AGE\",\n \"qualified_name\": \"MIN_AGE\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"public const int MIN_AGE = 10\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"[DebuggerDisplay(\\\"{Value}\\\")]\",\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 369,\n \"end_line_number\": 369,\n \"line_range\": [\n 369,\n 369\n ],\n \"declaration_order_index\": 51,\n \"symbol_name\": \"RETRY_LIMIT\",\n \"qualified_name\": \"RETRY_LIMIT\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"public const int RETRY_LIMIT = 3\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 370,\n \"end_line_number\": 370,\n \"line_range\": [\n 370,\n 370\n ],\n \"declaration_order_index\": 52,\n \"symbol_name\": \"CACHE_SIZE\",\n \"qualified_name\": \"CACHE_SIZE\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"public const int CACHE_SIZE = 128\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 371,\n \"end_line_number\": 371,\n \"line_range\": [\n 371,\n 371\n ],\n \"declaration_order_index\": 53,\n \"symbol_name\": \"DEFAULT_PAGE\",\n \"qualified_name\": \"DEFAULT_PAGE\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"public const int DEFAULT_PAGE = 1\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 374,\n \"end_line_number\": 410,\n \"line_range\": [\n 374,\n 410\n ],\n \"declaration_order_index\": 54,\n \"symbol_name\": \"ReqCoverCsharp\",\n \"qualified_name\": \"ReqCoverCsharp\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"public static class ReqCoverCsharp\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"ReqCoverCsharp1\",\n \"ReqCoverCsharp2\",\n \"ReqCoverCsharp3\",\n \"ReqCoverCsharp4\",\n \"ReqCoverCsharp5\"\n ],\n \"child_qualified_names\": [\n \"ReqCoverCsharp.ReqCoverCsharp1\",\n \"ReqCoverCsharp.ReqCoverCsharp2\",\n \"ReqCoverCsharp.ReqCoverCsharp3\",\n \"ReqCoverCsharp.ReqCoverCsharp4\",\n \"ReqCoverCsharp.ReqCoverCsharp5\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 376,\n \"end_line_number\": 376,\n \"line_range\": [\n 376,\n 376\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 377,\n \"end_line_number\": 377,\n \"line_range\": [\n 377,\n 377\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 378,\n \"end_line_number\": 378,\n \"line_range\": [\n 378,\n 378\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 379,\n \"end_line_number\": 379,\n \"line_range\": [\n 379,\n 379\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 382,\n \"end_line_number\": 382,\n \"line_range\": [\n 382,\n 382\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 2\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 2\"\n ]\n },\n {\n \"start_line_number\": 383,\n \"end_line_number\": 383,\n \"line_range\": [\n 383,\n 383\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 384,\n \"end_line_number\": 384,\n \"line_range\": [\n 384,\n 384\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 2.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 2.\"\n ]\n },\n {\n \"start_line_number\": 385,\n \"end_line_number\": 385,\n \"line_range\": [\n 385,\n 385\n ],\n \"text\": \"@param value Input value for helper construct 2.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 386,\n \"end_line_number\": 386,\n \"line_range\": [\n 386,\n 386\n ],\n \"text\": \"@return Output value for helper construct 2.\",\n \"text_lines\": [\n \"@return Output value for helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 389,\n \"end_line_number\": 389,\n \"line_range\": [\n 389,\n 389\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 3\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 3\"\n ]\n },\n {\n \"start_line_number\": 390,\n \"end_line_number\": 390,\n \"line_range\": [\n 390,\n 390\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 391,\n \"end_line_number\": 391,\n \"line_range\": [\n 391,\n 391\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 3.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 3.\"\n ]\n },\n {\n \"start_line_number\": 392,\n \"end_line_number\": 392,\n \"line_range\": [\n 392,\n 392\n ],\n \"text\": \"@param value Input value for helper construct 3.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 393,\n \"end_line_number\": 393,\n \"line_range\": [\n 393,\n 393\n ],\n \"text\": \"@return Output value for helper construct 3.\",\n \"text_lines\": [\n \"@return Output value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 4\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 4\"\n ]\n },\n {\n \"start_line_number\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 398,\n \"end_line_number\": 398,\n \"line_range\": [\n 398,\n 398\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 4.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 4.\"\n ]\n },\n {\n \"start_line_number\": 399,\n \"end_line_number\": 399,\n \"line_range\": [\n 399,\n 399\n ],\n \"text\": \"@param value Input value for helper construct 4.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 400,\n \"end_line_number\": 400,\n \"line_range\": [\n 400,\n 400\n ],\n \"text\": \"@return Output value for helper construct 4.\",\n \"text_lines\": [\n \"@return Output value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 5\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 5\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 5.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 5.\"\n ]\n },\n {\n \"start_line_number\": 406,\n \"end_line_number\": 406,\n \"line_range\": [\n 406,\n 406\n ],\n \"text\": \"@param value Input value for helper construct 5.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 407,\n \"end_line_number\": 407,\n \"line_range\": [\n 407,\n 407\n ],\n \"text\": \"@return Output value for helper construct 5.\",\n \"text_lines\": [\n \"@return Output value for helper construct 5.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 380,\n \"end_line_number\": 380,\n \"line_range\": [\n 380,\n 380\n ],\n \"declaration_order_index\": 55,\n \"symbol_name\": \"ReqCoverCsharp1\",\n \"qualified_name\": \"ReqCoverCsharp.ReqCoverCsharp1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static int ReqCoverCsharp1(int value) { return value + 1; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ReqCoverCsharp\",\n \"parent_qualified_name\": \"ReqCoverCsharp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 1.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 1.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 387,\n \"end_line_number\": 387,\n \"line_range\": [\n 387,\n 387\n ],\n \"declaration_order_index\": 56,\n \"symbol_name\": \"ReqCoverCsharp2\",\n \"qualified_name\": \"ReqCoverCsharp.ReqCoverCsharp2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static int ReqCoverCsharp2(int value) { return value + 2; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ReqCoverCsharp\",\n \"parent_qualified_name\": \"ReqCoverCsharp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 2.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 2.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\n ],\n \"declaration_order_index\": 57,\n \"symbol_name\": \"ReqCoverCsharp3\",\n \"qualified_name\": \"ReqCoverCsharp.ReqCoverCsharp3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static int ReqCoverCsharp3(int value) { return value + 3; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ReqCoverCsharp\",\n \"parent_qualified_name\": \"ReqCoverCsharp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 3.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 3.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 3.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\n ],\n \"declaration_order_index\": 58,\n \"symbol_name\": \"ReqCoverCsharp4\",\n \"qualified_name\": \"ReqCoverCsharp.ReqCoverCsharp4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static int ReqCoverCsharp4(int value) { return value + 4; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ReqCoverCsharp\",\n \"parent_qualified_name\": \"ReqCoverCsharp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 4.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 4.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 4.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 408,\n \"end_line_number\": 408,\n \"line_range\": [\n 408,\n 408\n ],\n \"declaration_order_index\": 59,\n \"symbol_name\": \"ReqCoverCsharp5\",\n \"qualified_name\": \"ReqCoverCsharp.ReqCoverCsharp5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"public static int ReqCoverCsharp5(int value) { return value + 5; }\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ReqCoverCsharp\",\n \"parent_qualified_name\": \"ReqCoverCsharp\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 5.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 5.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 5.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 5.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 5.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 2,\n \"end_line_number\": 2,\n \"line_range\": [\n 2,\n 2\n ],\n \"text\": \"@brief Comprehensive C# test fixture for parser validation.\",\n \"text_lines\": [\n \"@brief Comprehensive C# test fixture for parser validation.\"\n ]\n },\n {\n \"start_line_number\": 3,\n \"end_line_number\": 3,\n \"line_range\": [\n 3,\n 3\n ],\n \"text\": \"@details Covers records, pattern matching, LINQ, extension methods,\",\n \"text_lines\": [\n \"@details Covers records, pattern matching, LINQ, extension methods,\"\n ]\n },\n {\n \"start_line_number\": 4,\n \"end_line_number\": 4,\n \"line_range\": [\n 4,\n 4\n ],\n \"text\": \"async streams, nullable reference types, init-only setters,\",\n \"text_lines\": [\n \"async streams, nullable reference types, init-only setters,\"\n ]\n },\n {\n \"start_line_number\": 5,\n \"end_line_number\": 5,\n \"line_range\": [\n 5,\n 5\n ],\n \"text\": \"generic constraints, events, delegates, and indexers.\",\n \"text_lines\": [\n \"generic constraints, events, delegates, and indexers.\"\n ]\n },\n {\n \"start_line_number\": 6,\n \"end_line_number\": 6,\n \"line_range\": [\n 6,\n 6\n ],\n \"text\": \"Single line comment\",\n \"text_lines\": [\n \"Single line comment\"\n ]\n },\n {\n \"start_line_number\": 7,\n \"end_line_number\": 8,\n \"line_range\": [\n 7,\n 8\n ],\n \"text\": \"Multi-line comment\",\n \"text_lines\": [\n \"Multi-line\",\n \"comment\"\n ]\n },\n {\n \"start_line_number\": 17,\n \"end_line_number\": 17,\n \"line_range\": [\n 17,\n 17\n ],\n \"text\": \"── Delegates and events ───────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Delegates and events ───────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 19,\n \"end_line_number\": 19,\n \"line_range\": [\n 19,\n 19\n ],\n \"text\": \"@brief Delegate for handling data change notifications.\",\n \"text_lines\": [\n \"@brief Delegate for handling data change notifications.\"\n ]\n },\n {\n \"start_line_number\": 20,\n \"end_line_number\": 20,\n \"line_range\": [\n 20,\n 20\n ],\n \"text\": \"@details Emits sender and payload when tracked data changes.\",\n \"text_lines\": [\n \"@details Emits sender and payload when tracked data changes.\"\n ]\n },\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"@param sender The object raising the event.\",\n \"text_lines\": [\n \"@param sender The object raising the event.\"\n ]\n },\n {\n \"start_line_number\": 22,\n \"end_line_number\": 22,\n \"line_range\": [\n 22,\n 22\n ],\n \"text\": \"@param data The changed data payload.\",\n \"text_lines\": [\n \"@param data The changed data payload.\"\n ]\n },\n {\n \"start_line_number\": 23,\n \"end_line_number\": 23,\n \"line_range\": [\n 23,\n 23\n ],\n \"text\": \"@return Void delegate invocation.\",\n \"text_lines\": [\n \"@return Void delegate invocation.\"\n ]\n },\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"@brief Delegate for value transformation operations.\",\n \"text_lines\": [\n \"@brief Delegate for value transformation operations.\"\n ]\n },\n {\n \"start_line_number\": 27,\n \"end_line_number\": 27,\n \"line_range\": [\n 27,\n 27\n ],\n \"text\": \"@details Applies a deterministic conversion from input to output.\",\n \"text_lines\": [\n \"@details Applies a deterministic conversion from input to output.\"\n ]\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 28,\n \"line_range\": [\n 28,\n 28\n ],\n \"text\": \"@param value The value to transform.\",\n \"text_lines\": [\n \"@param value The value to transform.\"\n ]\n },\n {\n \"start_line_number\": 29,\n \"end_line_number\": 29,\n \"line_range\": [\n 29,\n 29\n ],\n \"text\": \"@return Transformed value.\",\n \"text_lines\": [\n \"@return Transformed value.\"\n ]\n },\n {\n \"start_line_number\": 30,\n \"end_line_number\": 30,\n \"line_range\": [\n 30,\n 30\n ],\n \"text\": \"@details Generic type parameter T defines input and output type.\",\n \"text_lines\": [\n \"@details Generic type parameter T defines input and output type.\"\n ]\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"@param value Input value bound to type T.\",\n \"text_lines\": [\n \"@param value Input value bound to type T.\"\n ]\n },\n {\n \"start_line_number\": 34,\n \"end_line_number\": 34,\n \"line_range\": [\n 34,\n 34\n ],\n \"text\": \"── Attributes ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Attributes ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 36,\n \"end_line_number\": 36,\n \"line_range\": [\n 36,\n 36\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 45,\n \"end_line_number\": 45,\n \"line_range\": [\n 45,\n 45\n ],\n \"text\": \"── Main class ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Main class ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 47,\n \"end_line_number\": 47,\n \"line_range\": [\n 47,\n 47\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 48,\n \"end_line_number\": 48,\n \"line_range\": [\n 48,\n 48\n ],\n \"text\": \"Primary class demonstrating various C# constructs including\",\n \"text_lines\": [\n \"Primary class demonstrating various C# constructs including\"\n ]\n },\n {\n \"start_line_number\": 49,\n \"end_line_number\": 49,\n \"line_range\": [\n 49,\n 49\n ],\n \"text\": \"properties, events, indexers, and async patterns.\",\n \"text_lines\": [\n \"properties, events, indexers, and async patterns.\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"<summary>Instance counter tracking total allocations.</summary>\",\n \"text_lines\": [\n \"<summary>Instance counter tracking total allocations.</summary>\"\n ]\n },\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"<summary>Internal name storage with backing field.</summary>\",\n \"text_lines\": [\n \"<summary>Internal name storage with backing field.</summary>\"\n ]\n },\n {\n \"start_line_number\": 63,\n \"end_line_number\": 63,\n \"line_range\": [\n 63,\n 63\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 64,\n \"end_line_number\": 64,\n \"line_range\": [\n 64,\n 64\n ],\n \"text\": \"Full name with validation on set.\",\n \"text_lines\": [\n \"Full name with validation on set.\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 71,\n \"line_range\": [\n 71,\n 71\n ],\n \"text\": \"Validate non-empty name\",\n \"text_lines\": [\n \"Validate non-empty name\"\n ]\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 81,\n \"line_range\": [\n 81,\n 81\n ],\n \"text\": \"<summary>Optional email address (nullable reference type).</summary>\",\n \"text_lines\": [\n \"<summary>Optional email address (nullable reference type).</summary>\"\n ]\n },\n {\n \"start_line_number\": 87,\n \"end_line_number\": 87,\n \"line_range\": [\n 87,\n 87\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 88,\n \"end_line_number\": 88,\n \"line_range\": [\n 88,\n 88\n ],\n \"text\": \"Event raised when person data changes.\",\n \"text_lines\": [\n \"Event raised when person data changes.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 89,\n \"line_range\": [\n 89,\n 89\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 92,\n \"end_line_number\": 92,\n \"line_range\": [\n 92,\n 92\n ],\n \"text\": \"@brief Construct a new Person with name and age.\",\n \"text_lines\": [\n \"@brief Construct a new Person with name and age.\"\n ]\n },\n {\n \"start_line_number\": 93,\n \"end_line_number\": 93,\n \"line_range\": [\n 93,\n 93\n ],\n \"text\": \"@details Initializes backing fields and updates instance counters.\",\n \"text_lines\": [\n \"@details Initializes backing fields and updates instance counters.\"\n ]\n },\n {\n \"start_line_number\": 107,\n \"end_line_number\": 107,\n \"line_range\": [\n 107,\n 107\n ],\n \"text\": \"Fire data changed event\",\n \"text_lines\": [\n \"Fire data changed event\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"@brief Fetch person data asynchronously with cancellation support.\",\n \"text_lines\": [\n \"@brief Fetch person data asynchronously with cancellation support.\"\n ]\n },\n {\n \"start_line_number\": 113,\n \"end_line_number\": 113,\n \"line_range\": [\n 113,\n 113\n ],\n \"text\": \"@details Waits asynchronously and returns a deterministic payload.\",\n \"text_lines\": [\n \"@details Waits asynchronously and returns a deterministic payload.\"\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 122,\n \"line_range\": [\n 122,\n 122\n ],\n \"text\": \"@brief Compare persons by age for sorting.\",\n \"text_lines\": [\n \"@brief Compare persons by age for sorting.\"\n ]\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 123,\n \"line_range\": [\n 123,\n 123\n ],\n \"text\": \"@details Implements IComparable ordering semantics.\",\n \"text_lines\": [\n \"@details Implements IComparable ordering semantics.\"\n ]\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"text\": \"Cleanup managed resources\",\n \"text_lines\": [\n \"Cleanup managed resources\"\n ]\n },\n {\n \"start_line_number\": 141,\n \"end_line_number\": 141,\n \"line_range\": [\n 141,\n 141\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 142,\n \"end_line_number\": 142,\n \"line_range\": [\n 142,\n 142\n ],\n \"text\": \"Indexer for accessing person properties by name.\",\n \"text_lines\": [\n \"Indexer for accessing person properties by name.\"\n ]\n },\n {\n \"start_line_number\": 143,\n \"end_line_number\": 143,\n \"line_range\": [\n 143,\n 143\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"text\": \"<param name=\\\"propertyName\\\">Name of the property to access.</param>\",\n \"text_lines\": [\n \"<param name=\\\"propertyName\\\">Name of the property to access.</param>\"\n ]\n },\n {\n \"start_line_number\": 145,\n \"end_line_number\": 145,\n \"line_range\": [\n 145,\n 145\n ],\n \"text\": \"<returns>Property value as object, or null.</returns>\",\n \"text_lines\": [\n \"<returns>Property value as object, or null.</returns>\"\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 157,\n \"line_range\": [\n 157,\n 157\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 158,\n \"end_line_number\": 158,\n \"line_range\": [\n 158,\n 158\n ],\n \"text\": \"Deconstruct for pattern matching support.\",\n \"text_lines\": [\n \"Deconstruct for pattern matching support.\"\n ]\n },\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 174,\n \"end_line_number\": 174,\n \"line_range\": [\n 174,\n 174\n ],\n \"text\": \"── Interface ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Interface ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 180,\n \"end_line_number\": 180,\n \"line_range\": [\n 180,\n 180\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 186,\n \"end_line_number\": 186,\n \"line_range\": [\n 186,\n 186\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 195,\n \"end_line_number\": 195,\n \"line_range\": [\n 195,\n 195\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 210,\n \"end_line_number\": 210,\n \"line_range\": [\n 210,\n 210\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 221,\n \"end_line_number\": 221,\n \"line_range\": [\n 221,\n 221\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 222,\n \"end_line_number\": 222,\n \"line_range\": [\n 222,\n 222\n ],\n \"text\": \"Add two points component-wise.\",\n \"text_lines\": [\n \"Add two points component-wise.\"\n ]\n },\n {\n \"start_line_number\": 223,\n \"end_line_number\": 223,\n \"line_range\": [\n 223,\n 223\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 226,\n \"end_line_number\": 226,\n \"line_range\": [\n 226,\n 226\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 227,\n \"end_line_number\": 227,\n \"line_range\": [\n 227,\n 227\n ],\n \"text\": \"Compute distance from origin.\",\n \"text_lines\": [\n \"Compute distance from origin.\"\n ]\n },\n {\n \"start_line_number\": 228,\n \"end_line_number\": 228,\n \"line_range\": [\n 228,\n 228\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 232,\n \"end_line_number\": 232,\n \"line_range\": [\n 232,\n 232\n ],\n \"text\": \"── Enum ───────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Enum ───────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 234,\n \"end_line_number\": 234,\n \"line_range\": [\n 234,\n 234\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 239,\n \"end_line_number\": 239,\n \"line_range\": [\n 239,\n 239\n ],\n \"text\": \"<summary>No color selected.</summary>\",\n \"text_lines\": [\n \"<summary>No color selected.</summary>\"\n ]\n },\n {\n \"start_line_number\": 241,\n \"end_line_number\": 241,\n \"line_range\": [\n 241,\n 241\n ],\n \"text\": \"<summary>Red channel.</summary>\",\n \"text_lines\": [\n \"<summary>Red channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 243,\n \"end_line_number\": 243,\n \"line_range\": [\n 243,\n 243\n ],\n \"text\": \"<summary>Green channel.</summary>\",\n \"text_lines\": [\n \"<summary>Green channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 245,\n \"end_line_number\": 245,\n \"line_range\": [\n 245,\n 245\n ],\n \"text\": \"<summary>Blue channel.</summary>\",\n \"text_lines\": [\n \"<summary>Blue channel.</summary>\"\n ]\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 247,\n \"line_range\": [\n 247,\n 247\n ],\n \"text\": \"<summary>All channels combined.</summary>\",\n \"text_lines\": [\n \"<summary>All channels combined.</summary>\"\n ]\n },\n {\n \"start_line_number\": 251,\n \"end_line_number\": 251,\n \"line_range\": [\n 251,\n 251\n ],\n \"text\": \"── Record types ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Record types ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 253,\n \"end_line_number\": 253,\n \"line_range\": [\n 253,\n 253\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 254,\n \"end_line_number\": 254,\n \"line_range\": [\n 254,\n 254\n ],\n \"text\": \"Immutable record for configuration entries.\",\n \"text_lines\": [\n \"Immutable record for configuration entries.\"\n ]\n },\n {\n \"start_line_number\": 260,\n \"end_line_number\": 260,\n \"line_range\": [\n 260,\n 260\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 261,\n \"end_line_number\": 261,\n \"line_range\": [\n 261,\n 261\n ],\n \"text\": \"Record struct for lightweight value records (C# 10).\",\n \"text_lines\": [\n \"Record struct for lightweight value records (C# 10).\"\n ]\n },\n {\n \"start_line_number\": 262,\n \"end_line_number\": 262,\n \"line_range\": [\n 262,\n 262\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 263,\n \"end_line_number\": 263,\n \"line_range\": [\n 263,\n 263\n ],\n \"text\": \"<param name=\\\"X\\\">X coordinate.</param>\",\n \"text_lines\": [\n \"<param name=\\\"X\\\">X coordinate.</param>\"\n ]\n },\n {\n \"start_line_number\": 264,\n \"end_line_number\": 264,\n \"line_range\": [\n 264,\n 264\n ],\n \"text\": \"<param name=\\\"Y\\\">Y coordinate.</param>\",\n \"text_lines\": [\n \"<param name=\\\"Y\\\">Y coordinate.</param>\"\n ]\n },\n {\n \"start_line_number\": 267,\n \"end_line_number\": 267,\n \"line_range\": [\n 267,\n 267\n ],\n \"text\": \"── Extension methods ──────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Extension methods ──────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 273,\n \"end_line_number\": 273,\n \"line_range\": [\n 273,\n 273\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 274,\n \"end_line_number\": 274,\n \"line_range\": [\n 274,\n 274\n ],\n \"text\": \"Truncate a string to the specified maximum length.\",\n \"text_lines\": [\n \"Truncate a string to the specified maximum length.\"\n ]\n },\n {\n \"start_line_number\": 275,\n \"end_line_number\": 275,\n \"line_range\": [\n 275,\n 275\n ],\n \"text\": \"</summary>\",\n \"text_lines\": [\n \"</summary>\"\n ]\n },\n {\n \"start_line_number\": 284,\n \"end_line_number\": 284,\n \"line_range\": [\n 284,\n 284\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 285,\n \"line_range\": [\n 285,\n 285\n ],\n \"text\": \"Check if a string contains only ASCII characters.\",\n \"text_lines\": [\n \"Check if a string contains only ASCII characters.\"\n ]\n },\n {\n \"start_line_number\": 294,\n \"end_line_number\": 294,\n \"line_range\": [\n 294,\n 294\n ],\n \"text\": \"── Generic class with constraints ─────────────────────────────────────\",\n \"text_lines\": [\n \"── Generic class with constraints ─────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 296,\n \"end_line_number\": 296,\n \"line_range\": [\n 296,\n 296\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 303,\n \"end_line_number\": 303,\n \"line_range\": [\n 303,\n 303\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 308,\n \"end_line_number\": 308,\n \"line_range\": [\n 308,\n 308\n ],\n \"text\": \"Binary search for insertion point\",\n \"text_lines\": [\n \"Binary search for insertion point\"\n ]\n },\n {\n \"start_line_number\": 314,\n \"end_line_number\": 314,\n \"line_range\": [\n 314,\n 314\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 315,\n \"end_line_number\": 315,\n \"line_range\": [\n 315,\n 315\n ],\n \"text\": \"Get items matching a predicate using LINQ.\",\n \"text_lines\": [\n \"Get items matching a predicate using LINQ.\"\n ]\n },\n {\n \"start_line_number\": 324,\n \"end_line_number\": 324,\n \"line_range\": [\n 324,\n 324\n ],\n \"text\": \"── Pattern matching utility ───────────────────────────────────────────\",\n \"text_lines\": [\n \"── Pattern matching utility ───────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 330,\n \"end_line_number\": 330,\n \"line_range\": [\n 330,\n 330\n ],\n \"text\": \"<summary>\",\n \"text_lines\": [\n \"<summary>\"\n ]\n },\n {\n \"start_line_number\": 331,\n \"end_line_number\": 331,\n \"line_range\": [\n 331,\n 331\n ],\n \"text\": \"Describe any object using C# pattern matching expressions.\",\n \"text_lines\": [\n \"Describe any object using C# pattern matching expressions.\"\n ]\n },\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 376,\n \"end_line_number\": 376,\n \"line_range\": [\n 376,\n 376\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 382,\n \"end_line_number\": 382,\n \"line_range\": [\n 382,\n 382\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 2\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 2\"\n ]\n },\n {\n \"start_line_number\": 383,\n \"end_line_number\": 383,\n \"line_range\": [\n 383,\n 383\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 389,\n \"end_line_number\": 389,\n \"line_range\": [\n 389,\n 389\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 3\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 3\"\n ]\n },\n {\n \"start_line_number\": 390,\n \"end_line_number\": 390,\n \"line_range\": [\n 390,\n 390\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 4\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 4\"\n ]\n },\n {\n \"start_line_number\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 5\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 5\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 411,\n \"end_line_number\": 411,\n \"line_range\": [\n 411,\n 411\n ],\n \"text\": \"REQ-COVER-SRS-231 END\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 END\"\n ]\n }\n ]\n }\n ]\n}\n",
4
+ "stderr": ""
5
+ }