@jwikman/bc-code-intelligence-mcp 1.5.7-dev.1

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 (753) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/dist/cache/cache-manager.d.ts +95 -0
  4. package/dist/cache/cache-manager.d.ts.map +1 -0
  5. package/dist/cache/cache-manager.js +328 -0
  6. package/dist/cache/cache-manager.js.map +1 -0
  7. package/dist/cli/bc-code-intel-cli.d.ts +9 -0
  8. package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
  9. package/dist/cli/bc-code-intel-cli.js +440 -0
  10. package/dist/cli/bc-code-intel-cli.js.map +1 -0
  11. package/dist/config/config-loader.d.ts +28 -0
  12. package/dist/config/config-loader.d.ts.map +1 -0
  13. package/dist/config/config-loader.js +497 -0
  14. package/dist/config/config-loader.js.map +1 -0
  15. package/dist/config/config-validator.d.ts +84 -0
  16. package/dist/config/config-validator.d.ts.map +1 -0
  17. package/dist/config/config-validator.js +608 -0
  18. package/dist/config/config-validator.js.map +1 -0
  19. package/dist/config/test-config-loader.d.ts +10 -0
  20. package/dist/config/test-config-loader.d.ts.map +1 -0
  21. package/dist/config/test-config-loader.js +135 -0
  22. package/dist/config/test-config-loader.js.map +1 -0
  23. package/dist/config/test-enhanced-layer-service.d.ts +7 -0
  24. package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
  25. package/dist/config/test-enhanced-layer-service.js +104 -0
  26. package/dist/config/test-enhanced-layer-service.js.map +1 -0
  27. package/dist/config/test-git-layer.d.ts +7 -0
  28. package/dist/config/test-git-layer.d.ts.map +1 -0
  29. package/dist/config/test-git-layer.js +68 -0
  30. package/dist/config/test-git-layer.js.map +1 -0
  31. package/dist/dev/hot-reload.d.ts +91 -0
  32. package/dist/dev/hot-reload.d.ts.map +1 -0
  33. package/dist/dev/hot-reload.js +358 -0
  34. package/dist/dev/hot-reload.js.map +1 -0
  35. package/dist/index.d.ts +82 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1211 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layers/base-layer.d.ts +133 -0
  40. package/dist/layers/base-layer.d.ts.map +1 -0
  41. package/dist/layers/base-layer.js +290 -0
  42. package/dist/layers/base-layer.js.map +1 -0
  43. package/dist/layers/embedded-layer.d.ts +130 -0
  44. package/dist/layers/embedded-layer.d.ts.map +1 -0
  45. package/dist/layers/embedded-layer.js +612 -0
  46. package/dist/layers/embedded-layer.js.map +1 -0
  47. package/dist/layers/git-layer.d.ts +77 -0
  48. package/dist/layers/git-layer.d.ts.map +1 -0
  49. package/dist/layers/git-layer.js +529 -0
  50. package/dist/layers/git-layer.js.map +1 -0
  51. package/dist/layers/index.d.ts +12 -0
  52. package/dist/layers/index.d.ts.map +1 -0
  53. package/dist/layers/index.js +11 -0
  54. package/dist/layers/index.js.map +1 -0
  55. package/dist/layers/layer-service.d.ts +135 -0
  56. package/dist/layers/layer-service.d.ts.map +1 -0
  57. package/dist/layers/layer-service.js +586 -0
  58. package/dist/layers/layer-service.js.map +1 -0
  59. package/dist/layers/project-layer.d.ts +58 -0
  60. package/dist/layers/project-layer.d.ts.map +1 -0
  61. package/dist/layers/project-layer.js +286 -0
  62. package/dist/layers/project-layer.js.map +1 -0
  63. package/dist/monitoring/production-monitor.d.ts +148 -0
  64. package/dist/monitoring/production-monitor.d.ts.map +1 -0
  65. package/dist/monitoring/production-monitor.js +463 -0
  66. package/dist/monitoring/production-monitor.js.map +1 -0
  67. package/dist/performance/performance-monitor.d.ts +99 -0
  68. package/dist/performance/performance-monitor.d.ts.map +1 -0
  69. package/dist/performance/performance-monitor.js +253 -0
  70. package/dist/performance/performance-monitor.js.map +1 -0
  71. package/dist/sdk/bc-code-intel-client.d.ts +175 -0
  72. package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
  73. package/dist/sdk/bc-code-intel-client.js +380 -0
  74. package/dist/sdk/bc-code-intel-client.js.map +1 -0
  75. package/dist/search/intelligent-search.d.ts +97 -0
  76. package/dist/search/intelligent-search.d.ts.map +1 -0
  77. package/dist/search/intelligent-search.js +358 -0
  78. package/dist/search/intelligent-search.js.map +1 -0
  79. package/dist/security/access-control.d.ts +110 -0
  80. package/dist/security/access-control.d.ts.map +1 -0
  81. package/dist/security/access-control.js +353 -0
  82. package/dist/security/access-control.js.map +1 -0
  83. package/dist/services/code-analysis-service.d.ts +72 -0
  84. package/dist/services/code-analysis-service.d.ts.map +1 -0
  85. package/dist/services/code-analysis-service.js +818 -0
  86. package/dist/services/code-analysis-service.js.map +1 -0
  87. package/dist/services/enhanced-prompt-service.d.ts +56 -0
  88. package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
  89. package/dist/services/enhanced-prompt-service.js +165 -0
  90. package/dist/services/enhanced-prompt-service.js.map +1 -0
  91. package/dist/services/knowledge-service.d.ts +90 -0
  92. package/dist/services/knowledge-service.d.ts.map +1 -0
  93. package/dist/services/knowledge-service.js +342 -0
  94. package/dist/services/knowledge-service.js.map +1 -0
  95. package/dist/services/methodology-service.d.ts +91 -0
  96. package/dist/services/methodology-service.d.ts.map +1 -0
  97. package/dist/services/methodology-service.js +423 -0
  98. package/dist/services/methodology-service.js.map +1 -0
  99. package/dist/services/multi-content-layer-service.d.ts +198 -0
  100. package/dist/services/multi-content-layer-service.d.ts.map +1 -0
  101. package/dist/services/multi-content-layer-service.js +991 -0
  102. package/dist/services/multi-content-layer-service.js.map +1 -0
  103. package/dist/services/roleplay-engine.d.ts +161 -0
  104. package/dist/services/roleplay-engine.d.ts.map +1 -0
  105. package/dist/services/roleplay-engine.js +994 -0
  106. package/dist/services/roleplay-engine.js.map +1 -0
  107. package/dist/services/session-storage/file-storage.d.ts +30 -0
  108. package/dist/services/session-storage/file-storage.d.ts.map +1 -0
  109. package/dist/services/session-storage/file-storage.js +229 -0
  110. package/dist/services/session-storage/file-storage.js.map +1 -0
  111. package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
  112. package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
  113. package/dist/services/session-storage/in-memory-storage.js +142 -0
  114. package/dist/services/session-storage/in-memory-storage.js.map +1 -0
  115. package/dist/services/specialist-discovery.d.ts +98 -0
  116. package/dist/services/specialist-discovery.d.ts.map +1 -0
  117. package/dist/services/specialist-discovery.js +387 -0
  118. package/dist/services/specialist-discovery.js.map +1 -0
  119. package/dist/services/specialist-loader.d.ts +101 -0
  120. package/dist/services/specialist-loader.d.ts.map +1 -0
  121. package/dist/services/specialist-loader.js +256 -0
  122. package/dist/services/specialist-loader.js.map +1 -0
  123. package/dist/services/specialist-session-manager.d.ts +76 -0
  124. package/dist/services/specialist-session-manager.d.ts.map +1 -0
  125. package/dist/services/specialist-session-manager.js +255 -0
  126. package/dist/services/specialist-session-manager.js.map +1 -0
  127. package/dist/services/workflow-service.d.ts +146 -0
  128. package/dist/services/workflow-service.d.ts.map +1 -0
  129. package/dist/services/workflow-service.js +409 -0
  130. package/dist/services/workflow-service.js.map +1 -0
  131. package/dist/setup/post-install.d.ts +12 -0
  132. package/dist/setup/post-install.d.ts.map +1 -0
  133. package/dist/setup/post-install.js +81 -0
  134. package/dist/setup/post-install.js.map +1 -0
  135. package/dist/streamlined-handlers.d.ts +94 -0
  136. package/dist/streamlined-handlers.d.ts.map +1 -0
  137. package/dist/streamlined-handlers.js +665 -0
  138. package/dist/streamlined-handlers.js.map +1 -0
  139. package/dist/test-enhanced-mcp-server.d.ts +7 -0
  140. package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
  141. package/dist/test-enhanced-mcp-server.js +177 -0
  142. package/dist/test-enhanced-mcp-server.js.map +1 -0
  143. package/dist/tools/config-diagnostic-tools.d.ts +234 -0
  144. package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
  145. package/dist/tools/config-diagnostic-tools.js +887 -0
  146. package/dist/tools/config-diagnostic-tools.js.map +1 -0
  147. package/dist/tools/core-tools.d.ts +26 -0
  148. package/dist/tools/core-tools.d.ts.map +1 -0
  149. package/dist/tools/core-tools.js +241 -0
  150. package/dist/tools/core-tools.js.map +1 -0
  151. package/dist/tools/handoff-tools.d.ts +37 -0
  152. package/dist/tools/handoff-tools.d.ts.map +1 -0
  153. package/dist/tools/handoff-tools.js +265 -0
  154. package/dist/tools/handoff-tools.js.map +1 -0
  155. package/dist/tools/index.d.ts +61 -0
  156. package/dist/tools/index.d.ts.map +1 -0
  157. package/dist/tools/index.js +75 -0
  158. package/dist/tools/index.js.map +1 -0
  159. package/dist/tools/onboarding-tools.d.ts +43 -0
  160. package/dist/tools/onboarding-tools.d.ts.map +1 -0
  161. package/dist/tools/onboarding-tools.js +353 -0
  162. package/dist/tools/onboarding-tools.js.map +1 -0
  163. package/dist/tools/specialist-discovery-tools.d.ts +27 -0
  164. package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
  165. package/dist/tools/specialist-discovery-tools.js +275 -0
  166. package/dist/tools/specialist-discovery-tools.js.map +1 -0
  167. package/dist/tools/specialist-tools.d.ts +43 -0
  168. package/dist/tools/specialist-tools.d.ts.map +1 -0
  169. package/dist/tools/specialist-tools.js +372 -0
  170. package/dist/tools/specialist-tools.js.map +1 -0
  171. package/dist/tools/workspace-tools.d.ts +96 -0
  172. package/dist/tools/workspace-tools.d.ts.map +1 -0
  173. package/dist/tools/workspace-tools.js +188 -0
  174. package/dist/tools/workspace-tools.js.map +1 -0
  175. package/dist/types/bc-knowledge.d.ts +303 -0
  176. package/dist/types/bc-knowledge.d.ts.map +1 -0
  177. package/dist/types/bc-knowledge.js +69 -0
  178. package/dist/types/bc-knowledge.js.map +1 -0
  179. package/dist/types/config-types.d.ts +186 -0
  180. package/dist/types/config-types.d.ts.map +1 -0
  181. package/dist/types/config-types.js +109 -0
  182. package/dist/types/config-types.js.map +1 -0
  183. package/dist/types/enhanced-layer-types.d.ts +193 -0
  184. package/dist/types/enhanced-layer-types.d.ts.map +1 -0
  185. package/dist/types/enhanced-layer-types.js +9 -0
  186. package/dist/types/enhanced-layer-types.js.map +1 -0
  187. package/dist/types/index.d.ts +5 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +7 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/layer-types.d.ts +173 -0
  192. package/dist/types/layer-types.d.ts.map +1 -0
  193. package/dist/types/layer-types.js +27 -0
  194. package/dist/types/layer-types.js.map +1 -0
  195. package/dist/types/roleplay-types.d.ts +156 -0
  196. package/dist/types/roleplay-types.d.ts.map +1 -0
  197. package/dist/types/roleplay-types.js +8 -0
  198. package/dist/types/roleplay-types.js.map +1 -0
  199. package/dist/types/session-types.d.ts +127 -0
  200. package/dist/types/session-types.d.ts.map +1 -0
  201. package/dist/types/session-types.js +8 -0
  202. package/dist/types/session-types.js.map +1 -0
  203. package/dist/utils/path-utils.d.ts +5 -0
  204. package/dist/utils/path-utils.d.ts.map +1 -0
  205. package/dist/utils/path-utils.js +14 -0
  206. package/dist/utils/path-utils.js.map +1 -0
  207. package/dist/workflows/domain-workflows.d.ts +8 -0
  208. package/dist/workflows/domain-workflows.d.ts.map +1 -0
  209. package/dist/workflows/domain-workflows.js +360 -0
  210. package/dist/workflows/domain-workflows.js.map +1 -0
  211. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
  212. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
  213. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
  214. package/embedded-knowledge/AGENTS.md +178 -0
  215. package/embedded-knowledge/CONTRIBUTING.md +58 -0
  216. package/embedded-knowledge/LICENSE +21 -0
  217. package/embedded-knowledge/README.md +32 -0
  218. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
  219. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
  220. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
  221. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
  222. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
  223. package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
  224. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
  225. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
  226. package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
  227. package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
  228. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
  229. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
  230. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
  231. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
  232. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
  233. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
  234. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
  235. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
  236. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
  237. package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
  238. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
  239. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
  240. package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
  241. package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
  242. package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
  243. package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
  244. package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
  245. package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
  246. package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
  247. package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
  248. package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
  249. package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
  250. package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
  251. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
  252. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
  253. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
  254. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
  255. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
  256. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
  257. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
  258. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
  259. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
  260. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
  261. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
  262. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
  263. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
  264. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
  265. package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
  266. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
  267. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
  268. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
  269. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
  270. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
  271. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
  272. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
  273. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
  274. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
  275. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
  276. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
  277. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
  278. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
  279. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
  280. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
  281. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
  282. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
  283. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
  284. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
  285. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
  286. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
  287. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
  288. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
  289. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
  290. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
  291. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
  292. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
  293. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
  294. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
  295. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
  296. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
  297. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
  298. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
  299. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
  300. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
  301. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
  302. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
  303. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
  304. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
  305. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
  306. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
  307. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
  308. package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
  309. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
  310. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
  311. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
  312. package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
  313. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
  314. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
  315. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
  316. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
  317. package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
  318. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
  319. package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
  320. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
  321. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
  322. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
  323. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
  324. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
  325. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
  326. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
  327. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
  328. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
  329. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
  330. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
  331. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
  332. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
  333. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
  334. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
  335. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
  336. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
  337. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
  338. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
  339. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
  340. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
  341. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
  342. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
  343. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
  344. package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
  345. package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
  346. package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
  347. package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
  348. package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
  349. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
  350. package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
  351. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
  352. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
  353. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
  354. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
  355. package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
  356. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
  357. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
  358. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
  359. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
  360. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
  361. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
  362. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
  363. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
  364. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
  365. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
  366. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
  367. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
  368. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
  369. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
  370. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
  371. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
  372. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
  373. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
  374. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
  375. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
  376. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
  377. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
  378. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
  379. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
  380. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
  381. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
  382. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
  383. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
  384. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
  385. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
  386. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
  387. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
  388. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
  389. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
  390. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
  391. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
  392. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
  393. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
  394. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
  395. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
  396. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
  397. package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
  398. package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
  399. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
  400. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
  401. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
  402. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
  403. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
  404. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
  405. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
  406. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
  407. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
  408. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
  409. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
  410. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
  411. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
  412. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
  413. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
  414. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
  415. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
  416. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
  417. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
  418. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
  419. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
  420. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
  421. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
  422. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
  423. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
  424. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
  425. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
  426. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
  427. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
  428. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
  429. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
  430. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
  431. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
  432. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
  433. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
  434. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
  435. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
  436. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
  437. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
  438. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
  439. package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
  440. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
  441. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
  442. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
  443. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
  444. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
  445. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
  446. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
  447. package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
  448. package/embedded-knowledge/indexes/domain-catalog.json +106 -0
  449. package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
  450. package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
  451. package/embedded-knowledge/indexes/tags/access-control.json +1 -0
  452. package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
  453. package/embedded-knowledge/indexes/tags/actions.json +1 -0
  454. package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
  455. package/embedded-knowledge/indexes/tags/advanced.json +1 -0
  456. package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
  457. package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
  458. package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
  459. package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
  460. package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
  461. package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
  462. package/embedded-knowledge/indexes/tags/analytics.json +1 -0
  463. package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
  464. package/embedded-knowledge/indexes/tags/api-design.json +1 -0
  465. package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
  466. package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
  467. package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
  468. package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
  469. package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
  470. package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
  471. package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
  472. package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
  473. package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
  474. package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
  475. package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
  476. package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
  477. package/embedded-knowledge/indexes/tags/api.json +1 -0
  478. package/embedded-knowledge/indexes/tags/architecture.json +1 -0
  479. package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
  480. package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
  481. package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
  482. package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
  483. package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
  484. package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
  485. package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
  486. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
  487. package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
  488. package/embedded-knowledge/indexes/tags/binding.json +1 -0
  489. package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
  490. package/embedded-knowledge/indexes/tags/blocks.json +1 -0
  491. package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
  492. package/embedded-knowledge/indexes/tags/branching.json +1 -0
  493. package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
  494. package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
  495. package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
  496. package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
  497. package/embedded-knowledge/indexes/tags/business-process.json +1 -0
  498. package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
  499. package/embedded-knowledge/indexes/tags/caching.json +1 -0
  500. package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
  501. package/embedded-knowledge/indexes/tags/case.json +1 -0
  502. package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
  503. package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
  504. package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
  505. package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
  506. package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
  507. package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
  508. package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
  509. package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
  510. package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
  511. package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
  512. package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
  513. package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
  514. package/embedded-knowledge/indexes/tags/code-style.json +1 -0
  515. package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
  516. package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
  517. package/embedded-knowledge/indexes/tags/comments.json +1 -0
  518. package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
  519. package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
  520. package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
  521. package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
  522. package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
  523. package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
  524. package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
  525. package/embedded-knowledge/indexes/tags/conditional.json +1 -0
  526. package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
  527. package/embedded-knowledge/indexes/tags/consistency.json +1 -0
  528. package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
  529. package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
  530. package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
  531. package/embedded-knowledge/indexes/tags/correlation.json +1 -0
  532. package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
  533. package/embedded-knowledge/indexes/tags/data-access.json +1 -0
  534. package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
  535. package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
  536. package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
  537. package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
  538. package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
  539. package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
  540. package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
  541. package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
  542. package/embedded-knowledge/indexes/tags/database.json +1 -0
  543. package/embedded-knowledge/indexes/tags/debugging.json +1 -0
  544. package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
  545. package/embedded-knowledge/indexes/tags/declaration.json +1 -0
  546. package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
  547. package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
  548. package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
  549. package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
  550. package/embedded-knowledge/indexes/tags/deployment.json +1 -0
  551. package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
  552. package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
  553. package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
  554. package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
  555. package/embedded-knowledge/indexes/tags/documentation.json +1 -0
  556. package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
  557. package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
  558. package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
  559. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
  560. package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
  561. package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
  562. package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
  563. package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
  564. package/embedded-knowledge/indexes/tags/error-text.json +1 -0
  565. package/embedded-knowledge/indexes/tags/etag.json +1 -0
  566. package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
  567. package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
  568. package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
  569. package/embedded-knowledge/indexes/tags/events.json +1 -0
  570. package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
  571. package/embedded-knowledge/indexes/tags/expressions.json +1 -0
  572. package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
  573. package/embedded-knowledge/indexes/tags/extensions.json +1 -0
  574. package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
  575. package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
  576. package/embedded-knowledge/indexes/tags/field-control.json +1 -0
  577. package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
  578. package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
  579. package/embedded-knowledge/indexes/tags/field-state.json +1 -0
  580. package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
  581. package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
  582. package/embedded-knowledge/indexes/tags/fields.json +1 -0
  583. package/embedded-knowledge/indexes/tags/filtering.json +1 -0
  584. package/embedded-knowledge/indexes/tags/filters.json +1 -0
  585. package/embedded-knowledge/indexes/tags/formatting.json +1 -0
  586. package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
  587. package/embedded-knowledge/indexes/tags/http-status.json +1 -0
  588. package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
  589. package/embedded-knowledge/indexes/tags/implementation.json +1 -0
  590. package/embedded-knowledge/indexes/tags/indentation.json +1 -0
  591. package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
  592. package/embedded-knowledge/indexes/tags/indexing.json +1 -0
  593. package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
  594. package/embedded-knowledge/indexes/tags/integration.json +1 -0
  595. package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
  596. package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
  597. package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
  598. package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
  599. package/embedded-knowledge/indexes/tags/isolation.json +1 -0
  600. package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
  601. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
  602. package/embedded-knowledge/indexes/tags/keywords.json +1 -0
  603. package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
  604. package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
  605. package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
  606. package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
  607. package/embedded-knowledge/indexes/tags/localization.json +1 -0
  608. package/embedded-knowledge/indexes/tags/logging.json +1 -0
  609. package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
  610. package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
  611. package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
  612. package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
  613. package/embedded-knowledge/indexes/tags/memory.json +1 -0
  614. package/embedded-knowledge/indexes/tags/message-design.json +1 -0
  615. package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
  616. package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
  617. package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
  618. package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
  619. package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
  620. package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
  621. package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
  622. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
  623. package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
  624. package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
  625. package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
  626. package/embedded-knowledge/indexes/tags/naming.json +1 -0
  627. package/embedded-knowledge/indexes/tags/navigation.json +1 -0
  628. package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
  629. package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
  630. package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
  631. package/embedded-knowledge/indexes/tags/no-series.json +1 -0
  632. package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
  633. package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
  634. package/embedded-knowledge/indexes/tags/odata.json +1 -0
  635. package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
  636. package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
  637. package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
  638. package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
  639. package/embedded-knowledge/indexes/tags/operators.json +1 -0
  640. package/embedded-knowledge/indexes/tags/optimization.json +1 -0
  641. package/embedded-knowledge/indexes/tags/order.json +1 -0
  642. package/embedded-knowledge/indexes/tags/organization.json +1 -0
  643. package/embedded-knowledge/indexes/tags/pages.json +1 -0
  644. package/embedded-knowledge/indexes/tags/parameters.json +1 -0
  645. package/embedded-knowledge/indexes/tags/patterns.json +1 -0
  646. package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
  647. package/embedded-knowledge/indexes/tags/performance.json +1 -0
  648. package/embedded-knowledge/indexes/tags/placement.json +1 -0
  649. package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
  650. package/embedded-knowledge/indexes/tags/posting.json +1 -0
  651. package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
  652. package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
  653. package/embedded-knowledge/indexes/tags/privacy.json +1 -0
  654. package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
  655. package/embedded-knowledge/indexes/tags/production.json +1 -0
  656. package/embedded-knowledge/indexes/tags/productivity.json +1 -0
  657. package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
  658. package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
  659. package/embedded-knowledge/indexes/tags/ranges.json +1 -0
  660. package/embedded-knowledge/indexes/tags/readability.json +1 -0
  661. package/embedded-knowledge/indexes/tags/record-access.json +1 -0
  662. package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
  663. package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
  664. package/embedded-knowledge/indexes/tags/reference.json +1 -0
  665. package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
  666. package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
  667. package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
  668. package/embedded-knowledge/indexes/tags/runtime.json +1 -0
  669. package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
  670. package/embedded-knowledge/indexes/tags/security.json +1 -0
  671. package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
  672. package/embedded-knowledge/indexes/tags/serialization.json +1 -0
  673. package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
  674. package/embedded-knowledge/indexes/tags/session.json +1 -0
  675. package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
  676. package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
  677. package/embedded-knowledge/indexes/tags/sift.json +1 -0
  678. package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
  679. package/embedded-knowledge/indexes/tags/spacing.json +1 -0
  680. package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
  681. package/embedded-knowledge/indexes/tags/standards.json +1 -0
  682. package/embedded-knowledge/indexes/tags/statements.json +1 -0
  683. package/embedded-knowledge/indexes/tags/streaming.json +1 -0
  684. package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
  685. package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
  686. package/embedded-knowledge/indexes/tags/structure.json +1 -0
  687. package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
  688. package/embedded-knowledge/indexes/tags/switch.json +1 -0
  689. package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
  690. package/embedded-knowledge/indexes/tags/syntax.json +1 -0
  691. package/embedded-knowledge/indexes/tags/systemid.json +1 -0
  692. package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
  693. package/embedded-knowledge/indexes/tags/table-events.json +1 -0
  694. package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
  695. package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
  696. package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
  697. package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
  698. package/embedded-knowledge/indexes/tags/template-method.json +1 -0
  699. package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
  700. package/embedded-knowledge/indexes/tags/testfield.json +1 -0
  701. package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
  702. package/embedded-knowledge/indexes/tags/triggers.json +1 -0
  703. package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
  704. package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
  705. package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
  706. package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
  707. package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
  708. package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
  709. package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
  710. package/embedded-knowledge/indexes/tags/validation.json +1 -0
  711. package/embedded-knowledge/indexes/tags/variables.json +1 -0
  712. package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
  713. package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
  714. package/embedded-knowledge/indexes/tags/web-services.json +1 -0
  715. package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
  716. package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
  717. package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
  718. package/embedded-knowledge/indexes/tags/workspace.json +1 -0
  719. package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
  720. package/embedded-knowledge/indexes/topic-relationships.json +128 -0
  721. package/embedded-knowledge/methodologies/index.json +81 -0
  722. package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
  723. package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
  724. package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
  725. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
  726. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
  727. package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
  728. package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
  729. package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
  730. package/embedded-knowledge/methodologies/phases/performance.md +211 -0
  731. package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
  732. package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
  733. package/embedded-knowledge/methodologies/phases/verification.md +146 -0
  734. package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
  735. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
  736. package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
  737. package/embedded-knowledge/specialists/alex-architect.md +305 -0
  738. package/embedded-knowledge/specialists/casey-copilot.md +314 -0
  739. package/embedded-knowledge/specialists/chris-config.md +226 -0
  740. package/embedded-knowledge/specialists/dean-debug.md +365 -0
  741. package/embedded-knowledge/specialists/eva-errors.md +291 -0
  742. package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
  743. package/embedded-knowledge/specialists/logan-legacy.md +265 -0
  744. package/embedded-knowledge/specialists/maya-mentor.md +299 -0
  745. package/embedded-knowledge/specialists/morgan-market.md +281 -0
  746. package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
  747. package/embedded-knowledge/specialists/quinn-tester.md +323 -0
  748. package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
  749. package/embedded-knowledge/specialists/sam-coder.md +342 -0
  750. package/embedded-knowledge/specialists/seth-security.md +290 -0
  751. package/embedded-knowledge/specialists/taylor-docs.md +312 -0
  752. package/embedded-knowledge/specialists/uma-ux.md +291 -0
  753. package/package.json +82 -0
@@ -0,0 +1,70 @@
1
+ ---
2
+ title: "SetLoadFields Partial Loading Performance Impact"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["performance", "memory-optimization", "data-loading", "setloadfields"]
7
+ samples: "samples/setloadfields-performance.md"
8
+ ---
9
+
10
+ # SetLoadFields Partial Loading Performance Impact
11
+
12
+ ## Overview
13
+
14
+ SetLoadFields enables partial record loading in Business Central, fundamentally changing data retrieval from traditional full-record loading to selective field loading. This optimization reduces memory overhead and database I/O by loading only specified fields rather than entire record structures.
15
+
16
+ **Key Impact**: Performance gains scale with field count differential - loading 3 fields from a 50-field table shows dramatic improvement, while loading 45 fields shows minimal benefit.
17
+
18
+ ## Strategic Framework
19
+
20
+ ### High-Impact Scenarios
21
+ - **Large field count tables** (20+ fields) where only 2-3 fields needed
22
+ - **Blob field tables** (images, documents) when blob data won't be accessed
23
+ - **Batch processing operations** handling large datasets
24
+ - **Cloud environments** where bandwidth optimization is critical
25
+
26
+ ### Low-Impact Scenarios
27
+ - Small tables with few fields
28
+ - Operations requiring most table fields
29
+ - Single-record lookups with minimal field requirements
30
+
31
+ ### Decision Threshold
32
+ Apply SetLoadFields when loading less than 30% of available table fields for meaningful performance gains.
33
+
34
+ ## Architecture Focus
35
+
36
+ ### Memory Optimization Pattern
37
+ SetLoadFields restricts AL's data retrieval to specified fields only, reducing the in-memory footprint proportional to field count reduction. This is particularly effective with tables containing blob fields or wide data structures.
38
+
39
+ ### Query Performance Impact
40
+ Database queries become more efficient through reduced data transfer and faster result set processing. The optimization compounds in batch operations where multiple records are processed.
41
+
42
+ ### Critical Constraint
43
+ Once a record is loaded with SetLoadFields, accessing non-loaded fields triggers automatic reloading of the entire record, potentially negating performance benefits if field access patterns aren't carefully planned.
44
+
45
+ ## Best Practices
46
+
47
+ ### Implementation Strategy
48
+ - **Analyze field usage patterns** before applying SetLoadFields
49
+ - **Group related field access** to minimize reload triggers
50
+ - **Apply consistently** in batch processing scenarios
51
+ - **Monitor performance impact** to validate optimization effectiveness
52
+
53
+ ### Field Selection Approach
54
+ Include all fields that will be accessed during the operation lifecycle to prevent expensive record reloads. Consider both direct field access and indirect access through related functions.
55
+
56
+ ### Batch Operation Optimization
57
+ SetLoadFields provides compound benefits in loops and bulk operations where the memory and I/O savings multiply across record count.
58
+
59
+ ## Anti-Patterns
60
+
61
+ ### Incomplete Field Loading
62
+ Loading a subset of fields only to access additional fields later in the process, triggering expensive full record reloads that eliminate performance gains.
63
+
64
+ ### Overuse in Small Tables
65
+ Applying SetLoadFields to tables with few fields where the optimization overhead exceeds the potential benefits.
66
+
67
+ ### Ignoring Access Patterns
68
+ Implementing SetLoadFields without analyzing actual field usage patterns, leading to frequent reloads and degraded performance.
69
+
70
+ *Performance measurement samples: see samples/setloadfields-performance.md*
@@ -0,0 +1,90 @@
1
+ ---
2
+ title: "AL SetLoadFields Performance Optimization"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["performance", "setloadfields", "optimization", "memory", "data-access"]
7
+ samples: "samples/setloadfields-optimization.md"
8
+ type: "performance-pattern"
9
+ category: "optimization"
10
+ pattern_type: "good"
11
+ severity: "medium"
12
+ impact_level: "high"
13
+ improvement_suggestion: "Use SetLoadFields for selective field loading to optimize memory and performance"
14
+ implementation_steps: ["analyze-field-usage", "implement-setloadfields", "measure-performance-impact"]
15
+ validation_criteria: ["memory-reduction", "performance-improvement", "maintained-functionality"]
16
+ technical_areas: ["al-code", "performance"]
17
+ ---
18
+
19
+ # AL SetLoadFields Performance Optimization
20
+
21
+ ## Overview
22
+
23
+ SetLoadFields enables selective field loading in AL, dramatically reducing memory consumption and improving performance by loading only required fields from database records. This optimization becomes critical when processing large datasets or working with tables containing many fields.
24
+
25
+ **Performance Impact**: Can reduce memory usage by 70-90% and improve query performance by 50-80% when properly implemented.
26
+
27
+ **Key Decision**: Use SetLoadFields before any record operations that don't require all table fields.
28
+
29
+ ## Strategic Framework
30
+
31
+ ### When SetLoadFields Delivers Maximum Value
32
+ - **Large table processing** with 20+ fields where only subset needed
33
+ - **Bulk operations** processing thousands of records
34
+ - **Report generation** requiring specific field combinations
35
+ - **Integration scenarios** transferring selective data sets
36
+ - **Memory-constrained environments** where optimization is critical
37
+
38
+ ### Optimal Implementation Patterns
39
+ - **Early Declaration**: Set fields immediately after record variable declaration
40
+ - **Minimal Field Sets**: Load only fields actually used in subsequent operations
41
+ - **Consistent Application**: Apply across entire data access workflow
42
+ - **Documentation Strategy**: Document field selection rationale for maintainability
43
+
44
+ ## Architecture Focus
45
+
46
+ ### Memory Optimization Architecture
47
+ SetLoadFields creates partial record instances containing only specified fields, significantly reducing memory footprint during record processing. The AL runtime optimizes database queries to retrieve only requested fields.
48
+
49
+ ### Data Access Pattern Integration
50
+ - **Query Planning**: Database optimizer uses field specifications for efficient query execution
51
+ - **Network Efficiency**: Reduced data transmission between database and application server
52
+ - **Memory Allocation**: Smaller record instances improve garbage collection performance
53
+ - **Caching Benefits**: More records fit in memory caches due to reduced size
54
+
55
+ ### Performance Monitoring Integration
56
+ Track SetLoadFields effectiveness through telemetry monitoring field loading patterns, memory usage reduction, and query performance improvements.
57
+
58
+ ## Best Practices
59
+
60
+ ### Field Selection Strategy
61
+ - **Usage Analysis**: Profile actual field usage patterns before optimization
62
+ - **Minimal Sets**: Include only fields accessed in subsequent code execution
63
+ - **Primary Key Inclusion**: Always include primary key fields for record identification
64
+ - **Calculated Field Considerations**: Include base fields required for FlowField calculations
65
+
66
+ ### Implementation Patterns
67
+ - **Early Application**: Call SetLoadFields immediately after record declaration
68
+ - **Consistent Scope**: Apply same field set throughout logical operation scope
69
+ - **Update Coordination**: Ensure field sets include all fields modified during updates
70
+ - **Error Handling**: Plan for scenarios where additional fields become necessary
71
+
72
+ ### Performance Validation
73
+ - **Before/After Measurement**: Compare memory and performance metrics with/without optimization
74
+ - **Load Testing**: Validate optimization effectiveness under realistic data volumes
75
+ - **Memory Profiling**: Monitor actual memory usage reduction in production scenarios
76
+ - **Query Analysis**: Verify database query optimization through execution plan analysis
77
+
78
+ ## Anti-Patterns
79
+
80
+ ### Avoid These Approaches
81
+ - **Over-Optimization**: Applying SetLoadFields for small record sets where overhead exceeds benefits
82
+ - **Incomplete Field Sets**: Missing critical fields causing runtime errors or additional queries
83
+ - **Dynamic Field Requirements**: Using SetLoadFields where field needs vary significantly during execution
84
+ - **Maintenance Complexity**: Creating overly complex field selection logic that's difficult to maintain
85
+ - **Late Application**: Calling SetLoadFields after initial record operations
86
+ - **Inconsistent Usage**: Mixing optimized and non-optimized patterns within same workflow
87
+ - **Primary Key Omission**: Excluding primary key fields breaking record operations
88
+
89
+ *Implementation examples: see samples/setloadfields-optimization.md*
90
+ *Related patterns: al-performance-optimization.md, memory-management-patterns.md*
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: "SetLoadFields Placement Before Case Statements"
3
+ domain: "dean-debug"
4
+ difficulty: "advanced"
5
+ bc_versions: "14+"
6
+ tags: ["setloadfields", "case-statements", "conditional-logic", "advanced"]
7
+ prerequisites: ["setloadfields-placement-before-filters", "case-statement-patterns"]
8
+ samples: "samples/setloadfields-before-case.md"
9
+ ---
10
+ # SetLoadFields Placement Before Case Statements
11
+
12
+ ## Overview
13
+
14
+ SetLoadFields placement before CASE statements enables field loading optimization in conditional processing scenarios. When record processing involves multiple execution paths with different field requirements, proper SetLoadFields placement ensures optimal performance across all code paths.
15
+
16
+ This advanced optimization technique is critical for complex business logic where field usage varies significantly based on record state, business rules, or processing context.
17
+
18
+ ## Conditional Processing Challenge
19
+
20
+ CASE statements and complex conditional logic create scenarios where different execution paths require different sets of fields. Without careful optimization, developers often load all potentially needed fields upfront, resulting in over-loading and reduced performance.
21
+
22
+ The challenge is optimizing field loading when you don't know which execution path will be taken until runtime evaluation of record values or business conditions.
23
+
24
+ ## Strategic Placement Benefits
25
+
26
+ Placing SetLoadFields before CASE statements allows you to:
27
+ - Load common fields needed across multiple execution paths
28
+ - Avoid over-loading fields needed only in specific conditions
29
+ - Maintain performance optimization while supporting complex business logic
30
+ - Create clear separation between data access optimization and business logic
31
+
32
+ This placement strategy works because SetLoadFields affects subsequent data access operations regardless of the conditional logic that determines which operations are executed.
33
+
34
+ ## Multi-Path Optimization
35
+
36
+ In scenarios with multiple execution paths, analyze field usage across all possible paths to identify:
37
+ - Common fields needed in all execution paths
38
+ - Path-specific fields needed only in certain conditions
39
+ - Fields that can be conditionally loaded within specific execution paths
40
+
41
+ Load common fields with the initial SetLoadFields call, then use additional SetLoadFields calls within specific CASE branches for path-specific field loading.
42
+
43
+ ## Performance Impact Analysis
44
+
45
+ The performance impact varies based on:
46
+ - Number of execution paths in the conditional logic
47
+ - Field overlap between different execution paths
48
+ - Frequency of each execution path in typical usage
49
+ - Size and complexity of fields in each category
50
+
51
+ Measure performance across different execution paths to validate that the optimization provides benefits in real usage scenarios rather than just theoretical improvements.
52
+
53
+ ## Implementation Strategy
54
+
55
+ Start with field usage analysis across all CASE statement branches to categorize field requirements. Identify the minimal set of fields needed for the CASE condition evaluation itself, plus any fields commonly used across multiple execution paths.
56
+
57
+ Place SetLoadFields before the CASE statement with common fields, then add conditional SetLoadFields calls within specific branches for path-specific fields.
58
+
59
+ ## Advanced Pattern Recognition
60
+
61
+ This optimization pattern applies to various conditional processing scenarios:
62
+ - Status-based processing where different record statuses require different field sets
63
+ - Type-based processing where record types determine field usage patterns
64
+ - Rule-based processing where business rules conditionally access different fields
65
+ - Workflow-based processing where process steps require specific field combinations
66
+
67
+ ## Conditional Field Loading
68
+
69
+ Within CASE statement branches, use additional SetLoadFields calls to load path-specific fields. This creates a two-tier optimization: common fields loaded upfront, specific fields loaded on demand.
70
+
71
+ This approach requires careful management to avoid loading fields multiple times or creating unnecessary database round trips for individual field access.
72
+
73
+ ## Error Handling Considerations
74
+
75
+ When using conditional SetLoadFields within CASE statements, ensure proper error handling for scenarios where field loading fails or records become invalid between the initial load and conditional processing.
76
+
77
+ Consider the implications of partial field loading on error recovery and debugging scenarios where developers need access to complete record information.
78
+
79
+ ## Performance Monitoring
80
+
81
+ Monitor the effectiveness of this optimization across different execution paths. Track metrics such as:
82
+ - Field loading efficiency for each CASE branch
83
+ - Memory usage patterns across different execution scenarios
84
+ - Database query performance for conditional field loading
85
+ - Overall processing time improvements
86
+
87
+ Use this monitoring data to refine the field loading strategy and adjust the balance between common and conditional field loading.
@@ -0,0 +1,70 @@
1
+ ---
2
+ title: "SetLoadFields Placement Before Filters"
3
+ domain: "dean-debug"
4
+ difficulty: "beginner"
5
+ bc_versions: "14+"
6
+ tags: ["setloadfields", "placement", "filters", "order"]
7
+ prerequisites: ["setloadfields-basics", "record-filtering"]
8
+ samples: "samples/setloadfields-before-filters.md"
9
+ ---
10
+ # SetLoadFields Placement Before Filters
11
+
12
+ ## Overview
13
+
14
+ SetLoadFields must be placed before filter operations (SETRANGE, SETFILTER) to be effective. This placement ensures that field loading optimization is applied during the database query execution rather than after records have already been loaded with all fields.
15
+
16
+ Proper placement is critical for realizing the performance benefits of SetLoadFields optimization. Incorrect placement results in no optimization benefit and can actually reduce performance due to unnecessary function calls.
17
+
18
+ ## Execution Order Impact
19
+
20
+ When SetLoadFields is placed before filters, BC incorporates the field loading specification into the database query planning. The database query is optimized to retrieve only the specified fields for records matching the filter criteria.
21
+
22
+ When SetLoadFields is placed after filters, BC has already executed the database query with full field loading. The SetLoadFields call becomes ineffective because the records are already loaded in memory with all fields populated.
23
+
24
+ ## BC Query Processing
25
+
26
+ BC processes record access operations in a specific sequence:
27
+ 1. SetLoadFields specification (if present)
28
+ 2. Filter criteria application (SETRANGE, SETFILTER)
29
+ 3. Database query execution with optimized field loading
30
+ 4. Record iteration (FIND, FINDSET, etc.)
31
+
32
+ This sequence ensures that field loading optimization is incorporated into the actual database query rather than applied as a post-processing step.
33
+
34
+ ## Performance Implications
35
+
36
+ Correct placement delivers significant performance benefits:
37
+ - Reduced database I/O for record retrieval
38
+ - Lower memory consumption during record processing
39
+ - Improved query execution speed
40
+ - Better network efficiency between BC service and database
41
+
42
+ Incorrect placement provides no performance benefit and adds unnecessary processing overhead from the ignored SetLoadFields call.
43
+
44
+ ## Common Placement Errors
45
+
46
+ The most common error is placing SetLoadFields after SETRANGE or SETFILTER operations. This happens when developers add SetLoadFields optimization to existing code without restructuring the data access logic.
47
+
48
+ Another common error is placing SetLoadFields immediately before record iteration (FIND, FINDSET) but after filter setup. While this appears logical, it's too late in the execution sequence to provide optimization benefits.
49
+
50
+ ## Verification Techniques
51
+
52
+ Verify correct placement by reviewing the sequence of your data access operations. SetLoadFields should be the first operation after record variable declaration and before any filter operations.
53
+
54
+ Use BC performance profiling tools to confirm that field loading optimization is actually taking effect. Properly placed SetLoadFields should show measurable improvements in query execution time and memory usage.
55
+
56
+ ## Code Organization Patterns
57
+
58
+ Organize your data access code with a consistent pattern:
59
+ 1. Record variable declaration
60
+ 2. SetLoadFields specification
61
+ 3. Filter setup (SETRANGE, SETFILTER)
62
+ 4. Record iteration and processing
63
+
64
+ This pattern ensures correct placement and makes the optimization visible to other developers working with the code.
65
+
66
+ ## Integration with Other Optimizations
67
+
68
+ Proper SetLoadFields placement is foundational for other field loading optimizations. Primary key optimization, filter field exclusion, and conditional field loading all depend on correct placement before filter operations.
69
+
70
+ Consider establishing coding standards that require SetLoadFields as the first data access operation after record variable declaration to ensure consistent correct placement across your codebase.
@@ -0,0 +1,74 @@
1
+ ---
2
+ title: "SetLoadFields Primary Key Optimization"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["setloadfields", "primary-key", "memory-optimization"]
7
+ prerequisites: ["record-variables", "primary-key-concepts"]
8
+ samples: "samples/setloadfields-primary-key.md"
9
+ ---
10
+ # SetLoadFields Primary Key Optimization
11
+
12
+ ## Overview
13
+
14
+ SetLoadFields with primary key fields provides the most fundamental memory optimization in BC development. By loading only the primary key fields, you minimize memory usage while maintaining record identity for subsequent operations.
15
+
16
+ This optimization is particularly effective when you need to pass records between functions, store record references, or perform record existence checks without requiring full record data.
17
+
18
+ ## Core Concept
19
+
20
+ Primary key optimization leverages BC's ability to uniquely identify records using only key fields. When you specify primary key fields in SetLoadFields, BC loads minimal data while preserving full record functionality for key-based operations.
21
+
22
+ The optimization works because BC can reconstruct record identity and perform key-based lookups without loading non-key field data into memory. This creates significant performance benefits in scenarios involving large record sets or memory-constrained operations.
23
+
24
+ ## When to Apply
25
+
26
+ Use primary key optimization when:
27
+ - Passing records between functions where only identity matters
28
+ - Building record reference collections
29
+ - Performing existence checks or validation
30
+ - Processing large datasets where full field loading causes memory pressure
31
+ - Creating temporary record variables for subsequent filtering
32
+
33
+ Avoid when you need non-key field values immediately after the SetLoadFields call, as this forces additional database round trips.
34
+
35
+ ## Performance Impact
36
+
37
+ Primary key optimization delivers:
38
+ - Reduced memory consumption (typically 60-80% reduction)
39
+ - Faster record loading from database
40
+ - Lower network traffic between BC service and database
41
+ - Improved garbage collection performance
42
+ - Better scalability with large record volumes
43
+
44
+ The optimization is most pronounced with tables containing many fields or large field values (text, blob, media fields).
45
+
46
+ ## Implementation Patterns
47
+
48
+ The basic pattern involves identifying the table's primary key fields and specifying only those fields in the SetLoadFields call. Most BC tables use surrogate keys (single integer field) or composite keys (multiple fields).
49
+
50
+ For tables with surrogate primary keys, specify the single key field. For tables with composite primary keys, include all fields that comprise the primary key.
51
+
52
+ ## Common Use Cases
53
+
54
+ **Record Reference Storage**: When maintaining collections of record references where you need identity but not data values.
55
+
56
+ **Cross-Function Record Passing**: Passing records to functions that will apply their own field loading based on their specific needs.
57
+
58
+ **Existence Validation**: Checking if records exist without needing their field values.
59
+
60
+ **Bulk Processing Setup**: Loading minimal record data before applying specific field loading for different processing paths.
61
+
62
+ ## Best Practices
63
+
64
+ Always identify the correct primary key fields for your target table. Use the table definition or AL development environment to verify key field composition.
65
+
66
+ Apply primary key optimization early in your data access chain, before other operations that might implicitly load additional fields.
67
+
68
+ Document your SetLoadFields usage to help other developers understand the optimization strategy and avoid accidentally loading additional fields.
69
+
70
+ ## Integration with Other Optimizations
71
+
72
+ Primary key optimization combines well with filter placement optimization - apply SetLoadFields with primary keys before setting filters to minimize the data loaded during filter evaluation.
73
+
74
+ This optimization also supports subsequent field-specific loading where you can add additional fields based on conditional logic or processing requirements.
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: "SIFT Technology Fundamentals"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["sift", "performance", "caching", "optimization", "streaming"]
7
+ prerequisites: ["caching-basics", "database-performance"]
8
+ samples: "samples/sift-technology-fundamentals.md"
9
+ related_topics: ["sift-implementation-patterns", "performance-optimization-workflow"]
10
+ estimated_time: "45 minutes"
11
+ ---
12
+ # SIFT Technology Fundamentals
13
+
14
+ ## Overview
15
+
16
+ SIFT (Streaming In-memory Fast Tables) is Business Central's advanced caching technology that dramatically improves performance for frequently accessed data. SIFT enables real-time aggregation of large datasets without impacting database performance, making it essential for high-performance BC applications.
17
+
18
+ **Core Value**: SIFT transforms expensive database aggregations into lightning-fast in-memory operations, reducing query times from seconds to milliseconds for summary data.
19
+
20
+ SIFT maintains pre-calculated totals and counts in memory, automatically updating as underlying data changes. This eliminates the need for expensive GROUP BY operations on large tables during user interactions.
21
+
22
+ ## Strategic Framework
23
+
24
+ ### Use SIFT When
25
+ - **High-frequency aggregations** on tables with >10,000 records
26
+ - **Real-time dashboards** requiring instant summary calculations
27
+ - **Financial reporting** with complex sum/count operations
28
+ - **Analytics scenarios** with frequent drill-down requirements
29
+
30
+ ### SIFT Architecture Components
31
+ - **SIFT Keys**: Define aggregation dimensions and hierarchy
32
+ - **SIFT Buckets**: In-memory storage for pre-calculated values
33
+ - **Update Triggers**: Automatic maintenance of aggregated data
34
+ - **Query Optimizer**: Intelligent routing of requests to SIFT vs database
35
+
36
+ ### Performance Impact Patterns
37
+ SIFT provides 10-100x performance improvement for aggregation queries but requires memory overhead and maintenance processing. Optimal for read-heavy scenarios with moderate write frequency.
38
+
39
+ ## Implementation Strategy
40
+
41
+ ### SIFT Key Design
42
+ Define SIFT keys based on actual reporting and query patterns, not theoretical needs. Each SIFT key creates memory overhead and maintenance cost.
43
+
44
+ **Hierarchy Principle**: Structure SIFT keys to support drill-down navigation from high-level summaries to detailed breakdowns.
45
+
46
+ ### Data Volume Considerations
47
+ SIFT becomes cost-effective when table size exceeds 10,000 records and aggregation frequency is high. Below this threshold, database queries may be more efficient.
48
+
49
+ ### Memory Management
50
+ SIFT buckets consume server memory proportional to data cardinality. Monitor memory usage and tune SIFT configurations based on actual system performance.
51
+
52
+ ## Best Practices
53
+
54
+ ### SIFT Key Optimization
55
+ - **Limit SIFT keys** to essential aggregation patterns
56
+ - **Order dimensions** by frequency of use (most common first)
57
+ - **Test with realistic data volumes** before production deployment
58
+ - **Monitor memory consumption** and query performance metrics
59
+
60
+ ### Integration Patterns
61
+ Combine SIFT with appropriate caching strategies for complete performance optimization. Use SIFT for aggregations, standard caching for detailed record access.
62
+
63
+ ### Maintenance Strategy
64
+ SIFT requires regular maintenance windows for optimization. Plan SIFT rebuild operations during low-usage periods to maintain optimal performance.
65
+
66
+ ## Anti-Patterns
67
+
68
+ ### Avoid These Approaches
69
+ - Creating SIFT keys for every possible aggregation combination
70
+ - Using SIFT on small tables where database queries are already fast
71
+ - Ignoring memory consumption when designing SIFT hierarchies
72
+ - Deploying SIFT without proper testing on production-scale data
73
+
74
+ ### Common Pitfalls
75
+ - **Over-SIFTing**: Creating too many SIFT keys leads to memory exhaustion
76
+ - **Under-testing**: SIFT behavior differs significantly between small and large datasets
77
+ - **Maintenance neglect**: Failing to schedule regular SIFT optimization operations
78
+
79
+ *Complete SIFT implementation guide: see SIFT implementation patterns in performance documentation*
80
+ *Memory optimization strategies: see SIFT memory management techniques*
81
+ *Sample implementations: see samples/sift-technology-fundamentals.md*
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: "SingleInstance Subscriber Performance Impact"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["events", "singleinstance", "memory", "performance"]
7
+ prerequisites: ["event-subscriber-basics", "memory-management"]
8
+ samples: "samples/singleinstance-subscribers.md"
9
+ ---
10
+ # SingleInstance Subscriber Performance Impact
11
+
12
+ ## Overview
13
+
14
+ SingleInstance subscriber codeunits create one instance per session that persists throughout the session lifecycle. This architectural pattern significantly impacts memory usage and performance characteristics compared to non-SingleInstance subscribers.
15
+
16
+ The SingleInstance pattern affects three critical performance areas: memory allocation patterns, initialization overhead, and cross-event state management. Understanding these impacts is essential for designing high-performance event-driven BC solutions.
17
+
18
+ ## Memory Allocation Patterns
19
+
20
+ SingleInstance subscribers consume memory differently than standard subscribers. The codeunit instance remains in memory for the entire session, including all global variables and their allocated memory. This persistence can lead to memory accumulation if not properly managed.
21
+
22
+ Memory usage grows incrementally with each event processed, particularly when global variables store event data or temporary objects. Large global arrays, complex data structures, or cached references compound memory consumption over long-running sessions.
23
+
24
+ The session-scoped lifetime means memory is only released when the user session ends, not after individual event processing completes. This pattern requires careful consideration of global variable usage and explicit cleanup strategies.
25
+
26
+ ## Initialization Performance Impact
27
+
28
+ SingleInstance subscribers incur initialization costs only once per session, during the first event trigger. This front-loaded initialization can improve performance for frequently triggered events but creates unpredictable response times for the initial event.
29
+
30
+ Heavy initialization logic in SingleInstance subscribers delays the first event response while benefiting subsequent events. The initialization timing becomes critical for user-facing operations where response time consistency matters.
31
+
32
+ Complex initialization sequences, external service connections, or large data loading operations amplify the first-event delay. Performance testing must account for both cold-start and warm-running scenarios.
33
+
34
+ ## Cross-Event State Management
35
+
36
+ SingleInstance subscribers can maintain state between event invocations, enabling sophisticated event processing patterns. However, state accumulation introduces performance considerations and potential side effects.
37
+
38
+ Global variables persisting event data across invocations can create unexpected dependencies between unrelated business operations. State accumulation requires explicit cleanup strategies to prevent memory leaks and logical inconsistencies.
39
+
40
+ Cross-event state enables powerful optimization patterns like caching frequently accessed data or maintaining connection pools. These optimizations must be balanced against memory usage and state consistency requirements.
41
+
42
+ ## Performance Optimization Strategies
43
+
44
+ Minimize global variable usage in SingleInstance subscribers to control memory consumption. Use local variables for event-specific data and reserve global variables for truly session-scoped information.
45
+
46
+ Implement explicit cleanup methods for global variables when appropriate. Consider memory usage patterns and implement cleanup at logical business process boundaries rather than after each event.
47
+
48
+ Design initialization sequences to be as lightweight as possible while still providing necessary functionality. Defer heavy initialization until actually needed rather than performing all setup during first event processing.
49
+
50
+ ## Common Performance Issues
51
+
52
+ Memory accumulation from uncleaned global variables leads to session memory growth and potential performance degradation over long sessions. This issue is particularly problematic in high-frequency event scenarios.
53
+
54
+ Excessive initialization overhead creates inconsistent response times, with the first event significantly slower than subsequent events. This pattern can impact user experience in interactive scenarios.
55
+
56
+ State management complexity increases debugging difficulty and can introduce performance bottlenecks when cross-event dependencies create processing delays or conflicts.
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: "Table Event Performance in Batch Operations"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["table-events", "batch-operations", "performance", "optimization"]
7
+ prerequisites: ["table-events-basics", "batch-processing"]
8
+ samples: "samples/table-event-batching.md"
9
+ ---
10
+ # Table Event Performance in Batch Operations
11
+
12
+ ## Overview
13
+
14
+ Table events (OnInsert, OnModify, OnDelete) trigger for every record operation, creating significant performance implications during batch processing scenarios. Understanding event firing patterns and optimization strategies is crucial for maintaining system performance during high-volume operations.
15
+
16
+ Batch operations that process thousands of records can generate corresponding thousands of event invocations, each potentially executing complex subscriber logic. This multiplication effect can transform efficient batch operations into performance bottlenecks.
17
+
18
+ Event performance impact varies dramatically based on subscriber complexity, event frequency, and batch size. Proper optimization requires understanding both the business requirements for event processing and the performance characteristics of subscriber implementations.
19
+
20
+ ## Event Firing Patterns
21
+
22
+ Table events fire synchronously for each record operation, creating a direct correlation between batch size and total event processing time. A batch inserting 1000 records triggers 1000 OnInsert events, each executing all registered subscribers.
23
+
24
+ Event firing cannot be disabled for individual operations, meaning all batch operations inherit the full event processing overhead. This design ensures data consistency and business rule enforcement but requires careful performance consideration.
25
+
26
+ Nested batch operations compound event firing, where batch operations triggering additional record operations create cascading event execution. Understanding operation nesting prevents unexpected performance degradation.
27
+
28
+ ## Performance Impact Analysis
29
+
30
+ Subscriber execution time directly multiplies with batch operation size, making even lightweight subscribers significant performance factors in large batches. A 10ms subscriber becomes a 10-second overhead for 1000-record batches.
31
+
32
+ Complex subscribers performing database queries, external service calls, or heavy calculations create substantial batch processing delays. The cumulative effect of multiple subscribers amplifies performance impact exponentially.
33
+
34
+ Memory allocation within subscribers accumulates across batch operations, potentially causing memory pressure during large batch processing. Subscriber memory patterns must consider batch operation contexts.
35
+
36
+ ## Optimization Strategies
37
+
38
+ Implement conditional logic within subscribers to minimize processing for batch operation contexts. Use system flags or operation context to detect batch scenarios and apply streamlined processing logic.
39
+
40
+ Defer expensive operations within subscribers when batch processing is detected. Accumulate changes for bulk processing after batch completion rather than processing each record individually.
41
+
42
+ Consider subscriber architecture patterns that aggregate operations across multiple event invocations, reducing per-event processing overhead through batching within the subscriber logic itself.
43
+
44
+ ## Batch Detection Techniques
45
+
46
+ System context information can indicate batch operation scenarios, allowing subscribers to adapt their processing logic accordingly. Session information and operation patterns provide batch detection signals.
47
+
48
+ Operation timing patterns help identify batch scenarios where multiple rapid-fire events suggest bulk processing rather than individual user operations. Time-based detection enables adaptive subscriber behavior.
49
+
50
+ Custom batch identification mechanisms allow application code to signal batch operations to subscribers, providing explicit control over batch-optimized processing paths.
51
+
52
+ ## Memory Management
53
+
54
+ Batch operations with table events can create significant memory allocation patterns as subscribers process large numbers of events consecutively. Memory allocation strategies must account for cumulative subscriber memory usage.
55
+
56
+ Global variables in subscribers accumulate memory across batch operations unless explicitly managed. Batch-aware cleanup strategies prevent memory accumulation during extended batch processing.
57
+
58
+ Temporary objects created within subscribers should be explicitly disposed when possible to prevent memory pressure during large batch operations.
59
+
60
+ ## Transaction Considerations
61
+
62
+ Table events execute within the same transaction as the triggering operation, meaning subscriber failures can rollback entire batch operations. Error handling strategies must balance data integrity with batch operation success.
63
+
64
+ Long-running subscribers can extend transaction duration for batch operations, potentially causing locking issues or transaction timeout failures. Subscriber performance directly affects batch operation transaction management.
65
+
66
+ Nested transaction scenarios in subscribers require careful consideration during batch operations to prevent deadlocks or transaction conflicts.