@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.
- package/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/cache/cache-manager.d.ts +95 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +328 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cli/bc-code-intel-cli.d.ts +9 -0
- package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
- package/dist/cli/bc-code-intel-cli.js +440 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +28 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +497 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +84 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +608 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/test-config-loader.d.ts +10 -0
- package/dist/config/test-config-loader.d.ts.map +1 -0
- package/dist/config/test-config-loader.js +135 -0
- package/dist/config/test-config-loader.js.map +1 -0
- package/dist/config/test-enhanced-layer-service.d.ts +7 -0
- package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
- package/dist/config/test-enhanced-layer-service.js +104 -0
- package/dist/config/test-enhanced-layer-service.js.map +1 -0
- package/dist/config/test-git-layer.d.ts +7 -0
- package/dist/config/test-git-layer.d.ts.map +1 -0
- package/dist/config/test-git-layer.js +68 -0
- package/dist/config/test-git-layer.js.map +1 -0
- package/dist/dev/hot-reload.d.ts +91 -0
- package/dist/dev/hot-reload.d.ts.map +1 -0
- package/dist/dev/hot-reload.js +358 -0
- package/dist/dev/hot-reload.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1211 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +133 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +290 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +130 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +612 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +77 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +529 -0
- package/dist/layers/git-layer.js.map +1 -0
- package/dist/layers/index.d.ts +12 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/index.js +11 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/layer-service.d.ts +135 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +586 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +58 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +286 -0
- package/dist/layers/project-layer.js.map +1 -0
- package/dist/monitoring/production-monitor.d.ts +148 -0
- package/dist/monitoring/production-monitor.d.ts.map +1 -0
- package/dist/monitoring/production-monitor.js +463 -0
- package/dist/monitoring/production-monitor.js.map +1 -0
- package/dist/performance/performance-monitor.d.ts +99 -0
- package/dist/performance/performance-monitor.d.ts.map +1 -0
- package/dist/performance/performance-monitor.js +253 -0
- package/dist/performance/performance-monitor.js.map +1 -0
- package/dist/sdk/bc-code-intel-client.d.ts +175 -0
- package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
- package/dist/sdk/bc-code-intel-client.js +380 -0
- package/dist/sdk/bc-code-intel-client.js.map +1 -0
- package/dist/search/intelligent-search.d.ts +97 -0
- package/dist/search/intelligent-search.d.ts.map +1 -0
- package/dist/search/intelligent-search.js +358 -0
- package/dist/search/intelligent-search.js.map +1 -0
- package/dist/security/access-control.d.ts +110 -0
- package/dist/security/access-control.d.ts.map +1 -0
- package/dist/security/access-control.js +353 -0
- package/dist/security/access-control.js.map +1 -0
- package/dist/services/code-analysis-service.d.ts +72 -0
- package/dist/services/code-analysis-service.d.ts.map +1 -0
- package/dist/services/code-analysis-service.js +818 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/enhanced-prompt-service.d.ts +56 -0
- package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
- package/dist/services/enhanced-prompt-service.js +165 -0
- package/dist/services/enhanced-prompt-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +90 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +342 -0
- package/dist/services/knowledge-service.js.map +1 -0
- package/dist/services/methodology-service.d.ts +91 -0
- package/dist/services/methodology-service.d.ts.map +1 -0
- package/dist/services/methodology-service.js +423 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/multi-content-layer-service.d.ts +198 -0
- package/dist/services/multi-content-layer-service.d.ts.map +1 -0
- package/dist/services/multi-content-layer-service.js +991 -0
- package/dist/services/multi-content-layer-service.js.map +1 -0
- package/dist/services/roleplay-engine.d.ts +161 -0
- package/dist/services/roleplay-engine.d.ts.map +1 -0
- package/dist/services/roleplay-engine.js +994 -0
- package/dist/services/roleplay-engine.js.map +1 -0
- package/dist/services/session-storage/file-storage.d.ts +30 -0
- package/dist/services/session-storage/file-storage.d.ts.map +1 -0
- package/dist/services/session-storage/file-storage.js +229 -0
- package/dist/services/session-storage/file-storage.js.map +1 -0
- package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
- package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
- package/dist/services/session-storage/in-memory-storage.js +142 -0
- package/dist/services/session-storage/in-memory-storage.js.map +1 -0
- package/dist/services/specialist-discovery.d.ts +98 -0
- package/dist/services/specialist-discovery.d.ts.map +1 -0
- package/dist/services/specialist-discovery.js +387 -0
- package/dist/services/specialist-discovery.js.map +1 -0
- package/dist/services/specialist-loader.d.ts +101 -0
- package/dist/services/specialist-loader.d.ts.map +1 -0
- package/dist/services/specialist-loader.js +256 -0
- package/dist/services/specialist-loader.js.map +1 -0
- package/dist/services/specialist-session-manager.d.ts +76 -0
- package/dist/services/specialist-session-manager.d.ts.map +1 -0
- package/dist/services/specialist-session-manager.js +255 -0
- package/dist/services/specialist-session-manager.js.map +1 -0
- package/dist/services/workflow-service.d.ts +146 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +409 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/setup/post-install.d.ts +12 -0
- package/dist/setup/post-install.d.ts.map +1 -0
- package/dist/setup/post-install.js +81 -0
- package/dist/setup/post-install.js.map +1 -0
- package/dist/streamlined-handlers.d.ts +94 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +665 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/test-enhanced-mcp-server.d.ts +7 -0
- package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
- package/dist/test-enhanced-mcp-server.js +177 -0
- package/dist/test-enhanced-mcp-server.js.map +1 -0
- package/dist/tools/config-diagnostic-tools.d.ts +234 -0
- package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
- package/dist/tools/config-diagnostic-tools.js +887 -0
- package/dist/tools/config-diagnostic-tools.js.map +1 -0
- package/dist/tools/core-tools.d.ts +26 -0
- package/dist/tools/core-tools.d.ts.map +1 -0
- package/dist/tools/core-tools.js +241 -0
- package/dist/tools/core-tools.js.map +1 -0
- package/dist/tools/handoff-tools.d.ts +37 -0
- package/dist/tools/handoff-tools.d.ts.map +1 -0
- package/dist/tools/handoff-tools.js +265 -0
- package/dist/tools/handoff-tools.js.map +1 -0
- package/dist/tools/index.d.ts +61 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +75 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/onboarding-tools.d.ts +43 -0
- package/dist/tools/onboarding-tools.d.ts.map +1 -0
- package/dist/tools/onboarding-tools.js +353 -0
- package/dist/tools/onboarding-tools.js.map +1 -0
- package/dist/tools/specialist-discovery-tools.d.ts +27 -0
- package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
- package/dist/tools/specialist-discovery-tools.js +275 -0
- package/dist/tools/specialist-discovery-tools.js.map +1 -0
- package/dist/tools/specialist-tools.d.ts +43 -0
- package/dist/tools/specialist-tools.d.ts.map +1 -0
- package/dist/tools/specialist-tools.js +372 -0
- package/dist/tools/specialist-tools.js.map +1 -0
- package/dist/tools/workspace-tools.d.ts +96 -0
- package/dist/tools/workspace-tools.d.ts.map +1 -0
- package/dist/tools/workspace-tools.js +188 -0
- package/dist/tools/workspace-tools.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +303 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +69 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +186 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +109 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/enhanced-layer-types.d.ts +193 -0
- package/dist/types/enhanced-layer-types.d.ts.map +1 -0
- package/dist/types/enhanced-layer-types.js +9 -0
- package/dist/types/enhanced-layer-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +173 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +27 -0
- package/dist/types/layer-types.js.map +1 -0
- package/dist/types/roleplay-types.d.ts +156 -0
- package/dist/types/roleplay-types.d.ts.map +1 -0
- package/dist/types/roleplay-types.js +8 -0
- package/dist/types/roleplay-types.js.map +1 -0
- package/dist/types/session-types.d.ts +127 -0
- package/dist/types/session-types.d.ts.map +1 -0
- package/dist/types/session-types.js +8 -0
- package/dist/types/session-types.js.map +1 -0
- package/dist/utils/path-utils.d.ts +5 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +14 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/workflows/domain-workflows.d.ts +8 -0
- package/dist/workflows/domain-workflows.d.ts.map +1 -0
- package/dist/workflows/domain-workflows.js +360 -0
- package/dist/workflows/domain-workflows.js.map +1 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
- package/embedded-knowledge/AGENTS.md +178 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +32 -0
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
- package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
- package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
- package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
- package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
- package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
- package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
- package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
- package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
- package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
- package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
- package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
- package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
- package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
- package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
- package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
- package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
- package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
- package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
- package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
- package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
- package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
- package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
- package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
- package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
- package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
- package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
- package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
- package/embedded-knowledge/indexes/domain-catalog.json +106 -0
- package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
- package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
- package/embedded-knowledge/indexes/tags/access-control.json +1 -0
- package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
- package/embedded-knowledge/indexes/tags/actions.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced.json +1 -0
- package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
- package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
- package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
- package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
- package/embedded-knowledge/indexes/tags/analytics.json +1 -0
- package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
- package/embedded-knowledge/indexes/tags/api-design.json +1 -0
- package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
- package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
- package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
- package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
- package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
- package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
- package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/api.json +1 -0
- package/embedded-knowledge/indexes/tags/architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
- package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
- package/embedded-knowledge/indexes/tags/binding.json +1 -0
- package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/branching.json +1 -0
- package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
- package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
- package/embedded-knowledge/indexes/tags/business-process.json +1 -0
- package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
- package/embedded-knowledge/indexes/tags/caching.json +1 -0
- package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/case.json +1 -0
- package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
- package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
- package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
- package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
- package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
- package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
- package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/code-style.json +1 -0
- package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
- package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
- package/embedded-knowledge/indexes/tags/comments.json +1 -0
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
- package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional.json +1 -0
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
- package/embedded-knowledge/indexes/tags/consistency.json +1 -0
- package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
- package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
- package/embedded-knowledge/indexes/tags/correlation.json +1 -0
- package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/data-access.json +1 -0
- package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
- package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
- package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
- package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
- package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
- package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
- package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/database.json +1 -0
- package/embedded-knowledge/indexes/tags/debugging.json +1 -0
- package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
- package/embedded-knowledge/indexes/tags/declaration.json +1 -0
- package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
- package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
- package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
- package/embedded-knowledge/indexes/tags/deployment.json +1 -0
- package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
- package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
- package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
- package/embedded-knowledge/indexes/tags/documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
- package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
- package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
- package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
- package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
- package/embedded-knowledge/indexes/tags/error-text.json +1 -0
- package/embedded-knowledge/indexes/tags/etag.json +1 -0
- package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
- package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
- package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
- package/embedded-knowledge/indexes/tags/events.json +1 -0
- package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/extensions.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
- package/embedded-knowledge/indexes/tags/field-control.json +1 -0
- package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
- package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/field-state.json +1 -0
- package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
- package/embedded-knowledge/indexes/tags/fields.json +1 -0
- package/embedded-knowledge/indexes/tags/filtering.json +1 -0
- package/embedded-knowledge/indexes/tags/filters.json +1 -0
- package/embedded-knowledge/indexes/tags/formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/http-status.json +1 -0
- package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/implementation.json +1 -0
- package/embedded-knowledge/indexes/tags/indentation.json +1 -0
- package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
- package/embedded-knowledge/indexes/tags/indexing.json +1 -0
- package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
- package/embedded-knowledge/indexes/tags/integration.json +1 -0
- package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
- package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
- package/embedded-knowledge/indexes/tags/isolation.json +1 -0
- package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/keywords.json +1 -0
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
- package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
- package/embedded-knowledge/indexes/tags/localization.json +1 -0
- package/embedded-knowledge/indexes/tags/logging.json +1 -0
- package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
- package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/memory.json +1 -0
- package/embedded-knowledge/indexes/tags/message-design.json +1 -0
- package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
- package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
- package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
- package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
- package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
- package/embedded-knowledge/indexes/tags/naming.json +1 -0
- package/embedded-knowledge/indexes/tags/navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series.json +1 -0
- package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
- package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/odata.json +1 -0
- package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
- package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/operators.json +1 -0
- package/embedded-knowledge/indexes/tags/optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/order.json +1 -0
- package/embedded-knowledge/indexes/tags/organization.json +1 -0
- package/embedded-knowledge/indexes/tags/pages.json +1 -0
- package/embedded-knowledge/indexes/tags/parameters.json +1 -0
- package/embedded-knowledge/indexes/tags/patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/performance.json +1 -0
- package/embedded-knowledge/indexes/tags/placement.json +1 -0
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
- package/embedded-knowledge/indexes/tags/posting.json +1 -0
- package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
- package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
- package/embedded-knowledge/indexes/tags/privacy.json +1 -0
- package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
- package/embedded-knowledge/indexes/tags/production.json +1 -0
- package/embedded-knowledge/indexes/tags/productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
- package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
- package/embedded-knowledge/indexes/tags/ranges.json +1 -0
- package/embedded-knowledge/indexes/tags/readability.json +1 -0
- package/embedded-knowledge/indexes/tags/record-access.json +1 -0
- package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
- package/embedded-knowledge/indexes/tags/reference.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime.json +1 -0
- package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
- package/embedded-knowledge/indexes/tags/security.json +1 -0
- package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
- package/embedded-knowledge/indexes/tags/serialization.json +1 -0
- package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
- package/embedded-knowledge/indexes/tags/session.json +1 -0
- package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
- package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
- package/embedded-knowledge/indexes/tags/sift.json +1 -0
- package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
- package/embedded-knowledge/indexes/tags/spacing.json +1 -0
- package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
- package/embedded-knowledge/indexes/tags/standards.json +1 -0
- package/embedded-knowledge/indexes/tags/statements.json +1 -0
- package/embedded-knowledge/indexes/tags/streaming.json +1 -0
- package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
- package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/structure.json +1 -0
- package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
- package/embedded-knowledge/indexes/tags/switch.json +1 -0
- package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
- package/embedded-knowledge/indexes/tags/syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/systemid.json +1 -0
- package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
- package/embedded-knowledge/indexes/tags/table-events.json +1 -0
- package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
- package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
- package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
- package/embedded-knowledge/indexes/tags/template-method.json +1 -0
- package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
- package/embedded-knowledge/indexes/tags/testfield.json +1 -0
- package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
- package/embedded-knowledge/indexes/tags/triggers.json +1 -0
- package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
- package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
- package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
- package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/validation.json +1 -0
- package/embedded-knowledge/indexes/tags/variables.json +1 -0
- package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
- package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
- package/embedded-knowledge/indexes/tags/web-services.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
- package/embedded-knowledge/indexes/tags/workspace.json +1 -0
- package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
- package/embedded-knowledge/indexes/topic-relationships.json +128 -0
- package/embedded-knowledge/methodologies/index.json +81 -0
- package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
- package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
- package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
- package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
- package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
- package/embedded-knowledge/methodologies/phases/performance.md +211 -0
- package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
- package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
- package/embedded-knowledge/methodologies/phases/verification.md +146 -0
- package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
- package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
- package/embedded-knowledge/specialists/alex-architect.md +305 -0
- package/embedded-knowledge/specialists/casey-copilot.md +314 -0
- package/embedded-knowledge/specialists/chris-config.md +226 -0
- package/embedded-knowledge/specialists/dean-debug.md +365 -0
- package/embedded-knowledge/specialists/eva-errors.md +291 -0
- package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
- package/embedded-knowledge/specialists/logan-legacy.md +265 -0
- package/embedded-knowledge/specialists/maya-mentor.md +299 -0
- package/embedded-knowledge/specialists/morgan-market.md +281 -0
- package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
- package/embedded-knowledge/specialists/quinn-tester.md +323 -0
- package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
- package/embedded-knowledge/specialists/sam-coder.md +342 -0
- package/embedded-knowledge/specialists/seth-security.md +290 -0
- package/embedded-knowledge/specialists/taylor-docs.md +312 -0
- package/embedded-knowledge/specialists/uma-ux.md +291 -0
- package/package.json +82 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Unnecessary Else Elimination"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["control-flow", "code-clarity", "optimization", "refactoring"]
|
|
7
|
+
type: "improvement-pattern"
|
|
8
|
+
category: "code-quality"
|
|
9
|
+
pattern_type: "good"
|
|
10
|
+
severity: "medium"
|
|
11
|
+
impact_level: "medium"
|
|
12
|
+
improvement_suggestion: "Eliminate unnecessary else statements to improve code readability and reduce nesting complexity"
|
|
13
|
+
implementation_steps: ["identify-redundant-else", "apply-early-exit-patterns", "validate-logic-flow"]
|
|
14
|
+
validation_criteria: ["reduced-complexity", "improved-readability"]
|
|
15
|
+
technical_areas: ["al-code"]
|
|
16
|
+
samples: "samples/al-unnecessary-else-elimination.md"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Unnecessary Else Elimination
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Eliminating unnecessary else statements in AL code improves readability, reduces nesting complexity, and creates cleaner control flow. This optimization technique focuses on early returns and guard clauses to simplify conditional logic.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Use early exit patterns and guard clauses to eliminate else statements when the if block ends execution flow.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Early Return Pattern
|
|
30
|
+
When an if statement ends with exit, return, or error, the subsequent else becomes unnecessary. The code after the if statement naturally handles the alternative case.
|
|
31
|
+
|
|
32
|
+
### Guard Clause Implementation
|
|
33
|
+
Replace nested if-else structures with guard clauses at the beginning of procedures. This creates a clear validation phase followed by main logic.
|
|
34
|
+
|
|
35
|
+
### Positive Logic Flow
|
|
36
|
+
Structure conditions to handle the expected path first, with error or edge cases handled through early exits.
|
|
37
|
+
|
|
38
|
+
### Reduced Cognitive Load
|
|
39
|
+
Fewer else statements mean less mental tracking of conditional paths and reduced nesting complexity.
|
|
40
|
+
|
|
41
|
+
## Architecture Focus
|
|
42
|
+
|
|
43
|
+
### Control Flow Simplification
|
|
44
|
+
**Linear Flow**: Early exits create straightforward top-to-bottom execution paths
|
|
45
|
+
**Reduced Nesting**: Elimination of else statements flattens nested conditional structures
|
|
46
|
+
**Clear Validation**: Guard clauses separate input validation from business logic
|
|
47
|
+
**Maintainable Structure**: Simplified control flow reduces modification complexity
|
|
48
|
+
|
|
49
|
+
### Error Handling Integration
|
|
50
|
+
Guard clauses naturally integrate with AL error handling patterns, creating clear separation between validation failures and business logic execution.
|
|
51
|
+
|
|
52
|
+
### Performance Considerations
|
|
53
|
+
Early exits can improve performance by avoiding unnecessary condition evaluation and code execution in error scenarios.
|
|
54
|
+
|
|
55
|
+
## Best Practices
|
|
56
|
+
|
|
57
|
+
### Identification Patterns
|
|
58
|
+
- **Exit After If**: When if block contains exit statement, else is unnecessary
|
|
59
|
+
- **Error After If**: When if block throws error, else clause is redundant
|
|
60
|
+
- **Return After If**: When if block returns value, subsequent code handles alternative
|
|
61
|
+
- **Guard Conditions**: Replace if-else with early validation checks
|
|
62
|
+
|
|
63
|
+
### Refactoring Approach
|
|
64
|
+
1. **Identify Candidates**: Look for if statements ending with exit/error/return
|
|
65
|
+
2. **Verify Logic**: Ensure else block logic can move to main flow
|
|
66
|
+
3. **Apply Transformation**: Remove else, unindent subsequent code
|
|
67
|
+
4. **Test Thoroughly**: Validate that logic behavior remains unchanged
|
|
68
|
+
|
|
69
|
+
### Readability Enhancement
|
|
70
|
+
- **Clear Intent**: Early exits make error conditions immediately obvious
|
|
71
|
+
- **Reduced Indentation**: Flatter code structure improves visual scanning
|
|
72
|
+
- **Logical Grouping**: Validation separated from main business logic
|
|
73
|
+
- **Simplified Debugging**: Fewer conditional paths to trace during troubleshooting
|
|
74
|
+
|
|
75
|
+
## Anti-Patterns
|
|
76
|
+
|
|
77
|
+
### Avoid These Approaches
|
|
78
|
+
- **Complex Else Logic**: Don't eliminate else when it contains substantial conditional logic
|
|
79
|
+
- **Parallel Conditions**: Keep else when both paths are equally valid business cases
|
|
80
|
+
- **State Dependencies**: Maintain else when subsequent code depends on if condition state
|
|
81
|
+
- **Performance Impact**: Avoid elimination if it duplicates expensive operations
|
|
82
|
+
|
|
83
|
+
Eliminating else statements that contain important alternative logic paths creates incorrect program behavior and should be avoided.
|
|
84
|
+
|
|
85
|
+
*Related patterns: al-early-exit-patterns.md, al-guard-clauses.md*
|
|
86
|
+
*Implementation examples: see samples/al-unnecessary-else-elimination.md*
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Variable Declaration Order"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["variables", "declaration", "code-structure", "organization"]
|
|
7
|
+
type: "improvement-pattern"
|
|
8
|
+
category: "code-quality"
|
|
9
|
+
pattern_type: "good"
|
|
10
|
+
severity: "medium"
|
|
11
|
+
impact_level: "medium"
|
|
12
|
+
improvement_suggestion: "Organize variable declarations in logical order to improve code readability and maintainability"
|
|
13
|
+
implementation_steps: ["establish-declaration-order", "group-related-variables", "apply-consistent-patterns"]
|
|
14
|
+
validation_criteria: ["consistent-declaration-order", "improved-organization"]
|
|
15
|
+
technical_areas: ["al-code"]
|
|
16
|
+
samples: "samples/al-variable-declaration-order.md"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Variable Declaration Order
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Systematic variable declaration ordering in AL improves code readability, maintenance efficiency, and team collaboration. Consistent ordering patterns help developers quickly locate and understand variable purposes within procedures and objects.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Group related variables together and order by importance, scope, and usage patterns to create predictable code structure.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Standard Declaration Sequence
|
|
30
|
+
1. **Input Parameters**: Method inputs in logical order
|
|
31
|
+
2. **Output Parameters**: Return values and output references
|
|
32
|
+
3. **Record Variables**: Primary business objects
|
|
33
|
+
4. **Temporary Records**: Buffer and temporary storage
|
|
34
|
+
5. **Management Objects**: Codeunits, pages, reports
|
|
35
|
+
6. **Simple Data Types**: Text, Integer, Decimal, Boolean
|
|
36
|
+
7. **System Objects**: Dialog, File, Stream variables
|
|
37
|
+
|
|
38
|
+
### Grouping Principles
|
|
39
|
+
- **Related Functionality**: Group variables serving similar purposes
|
|
40
|
+
- **Usage Frequency**: Most-used variables declared first within groups
|
|
41
|
+
- **Data Flow**: Input → Processing → Output variable ordering
|
|
42
|
+
- **Alphabetical Within Groups**: When no logical order exists, use alphabetical sorting
|
|
43
|
+
|
|
44
|
+
## Architecture Focus
|
|
45
|
+
|
|
46
|
+
### Scope-Based Organization
|
|
47
|
+
**Global Variables** follow object-level importance - core business records first, followed by supporting objects and simple types.
|
|
48
|
+
|
|
49
|
+
**Local Variables** prioritize procedure-specific logic flow - parameters first, then main processing variables, finally utility variables.
|
|
50
|
+
|
|
51
|
+
**Temporary Variables** grouped separately to clearly indicate their transient nature and memory management requirements.
|
|
52
|
+
|
|
53
|
+
### Type-Specific Patterns
|
|
54
|
+
- **Record Variables**: Order by relationship hierarchy (master records before detail records)
|
|
55
|
+
- **Management Variables**: Group by functional area (sales management, posting management)
|
|
56
|
+
- **Configuration Variables**: Place setup and configuration records after main business records
|
|
57
|
+
- **System Variables**: Group system objects (Dialog, File) at end of declarations
|
|
58
|
+
|
|
59
|
+
## Best Practices
|
|
60
|
+
|
|
61
|
+
### Logical Grouping
|
|
62
|
+
- **Business Context First**: Primary business objects at top of declarations
|
|
63
|
+
- **Supporting Objects Next**: Helper records and management objects follow
|
|
64
|
+
- **Utility Variables Last**: Counters, flags, and temporary values at end
|
|
65
|
+
- **Related Variables Together**: Keep functionally related variables adjacent
|
|
66
|
+
|
|
67
|
+
### Readability Enhancement
|
|
68
|
+
- **Blank Line Separation**: Use blank lines between logical groups
|
|
69
|
+
- **Inline Comments**: Document variable groups and their collective purpose
|
|
70
|
+
- **Consistent Spacing**: Align variable names and types for visual clarity
|
|
71
|
+
- **Descriptive Ordering**: Within groups, order by business logic flow
|
|
72
|
+
|
|
73
|
+
### Maintenance Considerations
|
|
74
|
+
- **Standard Patterns**: Follow consistent ordering across all team code
|
|
75
|
+
- **Refactoring Support**: Logical ordering simplifies variable impact analysis
|
|
76
|
+
- **Documentation**: Variable order should tell the story of the procedure's logic
|
|
77
|
+
- **Review Guidelines**: Include declaration order in code review checklists
|
|
78
|
+
|
|
79
|
+
## Anti-Patterns
|
|
80
|
+
|
|
81
|
+
### Avoid These Approaches
|
|
82
|
+
- **Random Ordering**: Variables declared in order of coding rather than logical importance
|
|
83
|
+
- **Mixed Types**: Simple types scattered between complex objects
|
|
84
|
+
- **No Grouping**: Related variables separated by unrelated declarations
|
|
85
|
+
- **Inconsistent Patterns**: Different ordering approaches within same codebase
|
|
86
|
+
|
|
87
|
+
Poorly ordered declarations make code changes more error-prone and time-consuming, with variable relationships becoming unclear and increasing maintenance risk.
|
|
88
|
+
|
|
89
|
+
*Related patterns: al-variable-naming-conventions.md, al-code-organization.md*
|
|
90
|
+
*Implementation examples: see samples/al-variable-declaration-order.md*
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Variable Naming Conventions"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["variables", "naming", "code-style", "readability"]
|
|
7
|
+
type: "improvement-pattern"
|
|
8
|
+
category: "code-quality"
|
|
9
|
+
pattern_type: "good"
|
|
10
|
+
severity: "medium"
|
|
11
|
+
impact_level: "medium"
|
|
12
|
+
improvement_suggestion: "Apply consistent variable naming conventions to enhance code readability and maintainability"
|
|
13
|
+
implementation_steps: ["establish-naming-standards", "apply-consistent-patterns", "validate-conventions"]
|
|
14
|
+
validation_criteria: ["consistent-naming-application", "improved-readability"]
|
|
15
|
+
technical_areas: ["al-code"]
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# AL Variable Naming Conventions
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Consistent variable naming in AL code improves readability, maintainability, and team collaboration. Business Central development follows Microsoft's naming conventions with specific adaptations for ERP domain concepts.
|
|
23
|
+
|
|
24
|
+
**Key Principle**: Variable names should clearly communicate purpose, scope, and data type without requiring additional documentation.
|
|
25
|
+
|
|
26
|
+
## Strategic Framework
|
|
27
|
+
|
|
28
|
+
### Naming Pattern Hierarchy
|
|
29
|
+
- **Local Variables**: CamelCase starting with lowercase (customerRecord, totalAmount)
|
|
30
|
+
- **Global Variables**: CamelCase starting with uppercase (CustomerBuffer, TotalSalesAmount)
|
|
31
|
+
- **Constants**: ALL_CAPS with underscores (MAX_RETRY_COUNT, DEFAULT_TIMEOUT)
|
|
32
|
+
- **Temporary Variables**: Prefix with "Temp" (TempCustomer, TempItemLedgerEntry)
|
|
33
|
+
|
|
34
|
+
### Domain-Specific Patterns
|
|
35
|
+
- **Record Variables**: Use table name without "Record" suffix (Customer, not CustomerRecord)
|
|
36
|
+
- **Buffer Variables**: Append "Buffer" for temporary storage (CustomerBuffer)
|
|
37
|
+
- **Counter Variables**: Use descriptive names (CustomerCount, not i or counter)
|
|
38
|
+
- **Boolean Variables**: Use positive phrasing with "Is/Has/Can" prefixes (IsPosted, HasPermission)
|
|
39
|
+
|
|
40
|
+
## Architecture Focus
|
|
41
|
+
|
|
42
|
+
### Scope-Based Conventions
|
|
43
|
+
**Local Variables** follow function-specific naming that clearly indicates their role within the procedure context.
|
|
44
|
+
|
|
45
|
+
**Global Variables** use broader context names that reflect their application-wide purpose and lifetime.
|
|
46
|
+
|
|
47
|
+
**Parameter Variables** match their usage pattern - input parameters use descriptive names, output parameters often include "Result" or "Output" suffixes.
|
|
48
|
+
|
|
49
|
+
### Type-Specific Patterns
|
|
50
|
+
- **Codeunit Variables**: Include "Mgt" or "Management" suffix (CustomerMgt, SalesMgt)
|
|
51
|
+
- **Page Variables**: Use "Page" suffix when storing page references (CustomerPage)
|
|
52
|
+
- **Report Variables**: Use "Report" suffix for report references (SalesReport)
|
|
53
|
+
- **XMLport Variables**: Use "XMLport" suffix (CustomerXMLport)
|
|
54
|
+
|
|
55
|
+
## Best Practices
|
|
56
|
+
|
|
57
|
+
### Clarity and Context
|
|
58
|
+
- **Avoid Abbreviations**: Use complete words unless standard BC abbreviations (Qty, Amt, No.)
|
|
59
|
+
- **Include Units**: For measurements, include unit context (AmountLCY, QtyBase)
|
|
60
|
+
- **Specify Direction**: For parameters, indicate flow (CustomerNoIn, ResultOut)
|
|
61
|
+
- **Use Business Terms**: Prefer domain language over technical terms (PostingDate vs DateVar)
|
|
62
|
+
|
|
63
|
+
### Consistency Patterns
|
|
64
|
+
- **Maintain Team Standards**: Follow established project conventions over personal preferences
|
|
65
|
+
- **Use Standard Prefixes**: Apply consistent prefixes for similar variable types
|
|
66
|
+
- **Document Deviations**: When breaking convention for specific reasons, include inline comments
|
|
67
|
+
- **Review and Refactor**: Regular code reviews should enforce naming consistency
|
|
68
|
+
|
|
69
|
+
### Hungarian Notation Avoidance
|
|
70
|
+
Modern AL development avoids Hungarian notation. Variable types are clear from declaration context, making type prefixes unnecessary and potentially misleading during refactoring.
|
|
71
|
+
|
|
72
|
+
## Anti-Patterns
|
|
73
|
+
|
|
74
|
+
### Avoid These Approaches
|
|
75
|
+
- **Generic Names**: Avoid "Rec", "TempRec", "Buffer" without context
|
|
76
|
+
- **Misleading Abbreviations**: Don't create custom abbreviations (CustAddr vs CustomerAddress)
|
|
77
|
+
- **Type Prefixes**: Avoid Hungarian notation (strName, intCount, bolIsValid)
|
|
78
|
+
- **Inconsistent Casing**: Mixed casing patterns within same codebase
|
|
79
|
+
|
|
80
|
+
Poor variable naming creates maintenance problems and makes code harder to understand, review, and modify effectively.
|
|
81
|
+
|
|
82
|
+
*Related patterns: al-variable-declaration-order.md, al-standard-abbreviations.md*
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Begin Block Statement Clarity for Developer Experience"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["user-experience", "code-clarity", "begin-blocks", "developer-productivity", "code-comprehension"]
|
|
7
|
+
prerequisites: ["al-syntax", "code-style"]
|
|
8
|
+
---
|
|
9
|
+
# Begin Block Statement Clarity for Developer Experience
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Strategic use of begin-end blocks enhances developer experience by creating clear code structure boundaries, improving comprehension speed, and reducing cognitive load when navigating complex procedural logic.
|
|
14
|
+
|
|
15
|
+
**Clarity Principle**: Use begin-end blocks consistently to create visual and logical boundaries that help developers quickly understand code structure and flow.
|
|
16
|
+
|
|
17
|
+
## Strategic Framework
|
|
18
|
+
|
|
19
|
+
### Developer Comprehension Strategy
|
|
20
|
+
- **Visual boundaries**: Use begin-end blocks to clearly delineate code sections
|
|
21
|
+
- **Logical grouping**: Group related statements within clear block structures
|
|
22
|
+
- **Navigation efficiency**: Create landmarks that help developers orient within procedures
|
|
23
|
+
- **Maintenance clarity**: Make code modifications easier by clarifying block scope
|
|
24
|
+
|
|
25
|
+
### Cognitive Load Reduction
|
|
26
|
+
- **Structural indicators**: Provide visual cues for code organization
|
|
27
|
+
- **Scope clarity**: Make variable and statement scope immediately apparent
|
|
28
|
+
- **Flow comprehension**: Help developers follow execution paths quickly
|
|
29
|
+
- **Error prevention**: Reduce mistakes caused by unclear code boundaries
|
|
30
|
+
|
|
31
|
+
## Architecture Patterns
|
|
32
|
+
|
|
33
|
+
### Explicit Block Structure
|
|
34
|
+
Use begin-end blocks even when not syntactically required to create consistent visual patterns that improve code readability and maintainability.
|
|
35
|
+
|
|
36
|
+
### Logical Section Grouping
|
|
37
|
+
Organize related statements within begin-end blocks to create clear functional sections within larger procedures.
|
|
38
|
+
|
|
39
|
+
### Nested Block Clarity
|
|
40
|
+
Structure nested blocks with consistent indentation and clear boundary markers to maintain comprehension in complex logic structures.
|
|
41
|
+
|
|
42
|
+
## Implementation Guidelines
|
|
43
|
+
|
|
44
|
+
### Block Usage Standards
|
|
45
|
+
- **Consistent application**: Use begin-end blocks uniformly across similar code structures
|
|
46
|
+
- **Logical boundaries**: Align block boundaries with functional or logical code sections
|
|
47
|
+
- **Indentation consistency**: Maintain clear visual hierarchy through consistent indentation
|
|
48
|
+
- **Comment integration**: Use comments with blocks to explain section purpose
|
|
49
|
+
|
|
50
|
+
### Developer Experience Optimization
|
|
51
|
+
Format blocks to support quick visual scanning, easy modification, and clear understanding of code structure and purpose.
|
|
52
|
+
|
|
53
|
+
### Team Collaboration Enhancement
|
|
54
|
+
Use consistent block patterns that help team members quickly understand and modify each other's code.
|
|
55
|
+
|
|
56
|
+
## Best Practices
|
|
57
|
+
|
|
58
|
+
### Structural Consistency
|
|
59
|
+
- **Pattern adherence**: Apply consistent begin-end block patterns across the codebase
|
|
60
|
+
- **Visual hierarchy**: Use indentation to show clear nesting and relationship patterns
|
|
61
|
+
- **Purposeful grouping**: Organize statements within blocks based on logical relationships
|
|
62
|
+
- **Maintenance support**: Structure blocks to facilitate easy code modification and extension
|
|
63
|
+
|
|
64
|
+
### Readability Enhancement
|
|
65
|
+
Design block usage to minimize the time required for developers to understand code structure and locate specific functionality.
|
|
66
|
+
|
|
67
|
+
### Tool Integration
|
|
68
|
+
Configure development tools to support consistent block formatting and provide visual indicators for block boundaries.
|
|
69
|
+
|
|
70
|
+
## Anti-Patterns
|
|
71
|
+
|
|
72
|
+
### Avoid These Approaches
|
|
73
|
+
- **Inconsistent block usage**: Mixing different approaches to block structure within the same codebase
|
|
74
|
+
- **Unclear boundaries**: Poor indentation or formatting that obscures block structure
|
|
75
|
+
- **Unnecessary complexity**: Over-nesting or excessive block subdivision
|
|
76
|
+
- **Missing logical grouping**: Failing to group related statements within clear block boundaries
|
|
77
|
+
- **Ignored formatting standards**: Manual formatting that creates inconsistent visual patterns
|
|
78
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Begin/End Positioning in AL Code"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["code-style", "readability", "structure", "begin-end", "formatting"]
|
|
7
|
+
samples: "samples/begin-end-positioning.md"
|
|
8
|
+
type: "best-practice"
|
|
9
|
+
category: "code-structure"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "low"
|
|
12
|
+
impact_level: "medium"
|
|
13
|
+
improvement_suggestion: "Use consistent begin/end positioning for improved code readability"
|
|
14
|
+
implementation_steps: ["establish-team-standards", "configure-formatting-tools", "apply-consistently"]
|
|
15
|
+
validation_criteria: ["consistent-positioning", "improved-readability", "team-adoption"]
|
|
16
|
+
technical_areas: ["al-code", "formatting"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Begin/End Positioning in AL Code
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Begin/end positioning in AL code significantly impacts readability and maintainability. Strategic placement of begin/end keywords creates visual structure that helps developers quickly understand code flow and hierarchy. The positioning choice affects scan-ability, debugging efficiency, and team collaboration effectiveness.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Position begin/end keywords to maximize code readability and create clear visual structure that supports rapid code comprehension.
|
|
26
|
+
|
|
27
|
+
The "begin as afterword" pattern places the begin keyword on the same line as the procedure declaration, optimizing vertical space while maintaining clear block boundaries. This approach balances conciseness with structural clarity.
|
|
28
|
+
|
|
29
|
+
## Strategic Framework
|
|
30
|
+
|
|
31
|
+
### Readability Optimization Patterns
|
|
32
|
+
**Primary Goal**: Create code structure that supports rapid visual scanning and comprehension. Begin/end positioning should enhance, not hinder, a developer's ability to understand code intent and flow.
|
|
33
|
+
|
|
34
|
+
**Visual Hierarchy**: Consistent begin/end positioning creates predictable visual patterns that help developers navigate code efficiently. The eye learns to recognize structural boundaries, reducing cognitive load during code review and debugging.
|
|
35
|
+
|
|
36
|
+
### Team Collaboration Benefits
|
|
37
|
+
**Consistency Standards**: Uniform begin/end positioning across team codebases reduces context switching overhead when developers work on different modules. Consistent formatting patterns become familiar navigation aids.
|
|
38
|
+
|
|
39
|
+
**Code Review Efficiency**: Well-positioned begin/end keywords facilitate faster code reviews by creating clear visual boundaries around logical code blocks. Reviewers can quickly identify scope and structure without mental parsing overhead.
|
|
40
|
+
|
|
41
|
+
## Architecture Focus
|
|
42
|
+
|
|
43
|
+
### Structural Clarity Principles
|
|
44
|
+
**Block Boundary Definition**: Begin/end positioning should clearly delineate logical code blocks without creating visual noise. The positioning choice affects how developers perceive code organization and flow.
|
|
45
|
+
|
|
46
|
+
**Nesting Visualization**: Proper begin/end positioning helps visualize nested code structures, making complex procedure hierarchies easier to understand and maintain.
|
|
47
|
+
|
|
48
|
+
### Scanning Optimization
|
|
49
|
+
**Vertical Space Efficiency**: Strategic begin/end positioning optimizes vertical screen real estate while maintaining structural clarity. This balance is crucial for modern development environments with limited vertical display space.
|
|
50
|
+
|
|
51
|
+
**Pattern Recognition**: Consistent positioning patterns enable rapid visual pattern recognition, allowing developers to quickly identify procedure boundaries, conditional blocks, and loop structures.
|
|
52
|
+
|
|
53
|
+
## Best Practices
|
|
54
|
+
|
|
55
|
+
### Consistency Implementation
|
|
56
|
+
- **Team Standards**: Establish and document team-wide begin/end positioning standards. Consistency across the codebase is more valuable than individual preference optimization.
|
|
57
|
+
- **Tool Integration**: Configure AL development tools to automatically format begin/end positioning according to team standards. Automated formatting reduces inconsistency and discussion overhead.
|
|
58
|
+
|
|
59
|
+
### Readability Enhancement
|
|
60
|
+
- **Logical Grouping**: Use begin/end positioning to reinforce logical code grouping. The visual structure should align with the logical structure of the procedure or function.
|
|
61
|
+
- **Debugging Support**: Position begin/end keywords to facilitate debugging workflows. Clear block boundaries help when setting breakpoints and stepping through code execution.
|
|
62
|
+
|
|
63
|
+
### Professional Standards
|
|
64
|
+
- **Industry Conventions**: Align begin/end positioning with broader AL and Business Central community conventions. This facilitates knowledge transfer and reduces onboarding friction for new team members.
|
|
65
|
+
- **Documentation Integration**: Ensure begin/end positioning supports code documentation patterns. Clear structural boundaries enhance documentation readability and usefulness.
|
|
66
|
+
|
|
67
|
+
## Anti-Patterns
|
|
68
|
+
|
|
69
|
+
### Avoid These Approaches
|
|
70
|
+
- **Mixed Positioning**: Avoid mixing different begin/end positioning styles within the same codebase. Inconsistency creates cognitive overhead and reduces code professionalism.
|
|
71
|
+
- **Context-Dependent Formatting**: Don't vary begin/end positioning based on procedure complexity or developer preference. Consistency trumps optimization for specific scenarios.
|
|
72
|
+
- **Excessive Compaction**: Avoid positioning choices that sacrifice readability for minimal space savings. Code clarity should take precedence over character count optimization.
|
|
73
|
+
- **Unclear Boundaries**: Don't use begin/end positioning that obscures logical code block boundaries. The positioning should enhance, not hinder, structural understanding.
|
|
74
|
+
|
|
75
|
+
*Implementation examples: see samples/begin-end-positioning.md*
|
|
76
|
+
*Related patterns: code-formatting-standards.md, procedure-organization-patterns.md*
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Binary Operator Line Positioning and Code Readability"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["code-style", "operators", "readability", "formatting", "line-breaks"]
|
|
7
|
+
prerequisites: ["al-syntax", "code-formatting"]
|
|
8
|
+
---
|
|
9
|
+
# Binary Operator Line Positioning and Code Readability
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Strategic positioning of binary operators in multi-line expressions enhances code readability by creating clear visual alignment and logical flow, making complex expressions easier to parse and maintain.
|
|
14
|
+
|
|
15
|
+
**Readability Principle**: Position binary operators consistently to create visual patterns that guide the reader's eye through complex logical and mathematical expressions.
|
|
16
|
+
|
|
17
|
+
## Strategic Framework
|
|
18
|
+
|
|
19
|
+
### Visual Alignment Strategy
|
|
20
|
+
- **Leading operators**: Place operators at the beginning of continuation lines
|
|
21
|
+
- **Consistent indentation**: Align continuation lines for visual clarity
|
|
22
|
+
- **Logical grouping**: Use operator positioning to show expression hierarchy
|
|
23
|
+
- **Scanning optimization**: Format for efficient visual parsing of complex conditions
|
|
24
|
+
|
|
25
|
+
### Expression Flow Design
|
|
26
|
+
- **Left-to-right reading**: Support natural reading patterns in operator placement
|
|
27
|
+
- **Precedence clarity**: Use positioning to reinforce operator precedence
|
|
28
|
+
- **Continuation indicators**: Make line breaks and continuations obvious
|
|
29
|
+
- **Nested expression handling**: Maintain clarity in complex nested conditions
|
|
30
|
+
|
|
31
|
+
## Architecture Patterns
|
|
32
|
+
|
|
33
|
+
### Leading Operator Pattern
|
|
34
|
+
Place binary operators at the beginning of continuation lines to create clear visual indicators of expression continuation and logical flow.
|
|
35
|
+
|
|
36
|
+
### Aligned Continuation Pattern
|
|
37
|
+
Indent continuation lines consistently to create visual columns that make it easy to follow complex multi-line expressions.
|
|
38
|
+
|
|
39
|
+
### Hierarchical Expression Layout
|
|
40
|
+
Use operator positioning and indentation to visually represent the logical structure of complex boolean and mathematical expressions.
|
|
41
|
+
|
|
42
|
+
## Implementation Guidelines
|
|
43
|
+
|
|
44
|
+
### Formatting Standards
|
|
45
|
+
- **Operator placement**: Consistently place binary operators at line beginnings
|
|
46
|
+
- **Indentation depth**: Use consistent indentation for continuation lines
|
|
47
|
+
- **Spacing consistency**: Maintain uniform spacing around operators
|
|
48
|
+
- **Line break logic**: Break lines at logical expression boundaries
|
|
49
|
+
|
|
50
|
+
### Complex Expression Handling
|
|
51
|
+
Break long expressions at appropriate logical points, using operator positioning to maintain readability and show the relationship between expression parts.
|
|
52
|
+
|
|
53
|
+
### Tool Integration
|
|
54
|
+
Configure code formatting tools to apply consistent binary operator positioning rules across the codebase automatically.
|
|
55
|
+
|
|
56
|
+
## Best Practices
|
|
57
|
+
|
|
58
|
+
### Consistency Standards
|
|
59
|
+
- **Team conventions**: Establish and follow team-wide operator positioning standards
|
|
60
|
+
- **Automated formatting**: Use formatting tools to maintain consistency
|
|
61
|
+
- **Code review focus**: Include operator positioning in code review criteria
|
|
62
|
+
- **Style guide documentation**: Document operator positioning rules clearly
|
|
63
|
+
|
|
64
|
+
### Readability Optimization
|
|
65
|
+
Format expressions to minimize cognitive load, using operator positioning and alignment to create visual patterns that aid comprehension.
|
|
66
|
+
|
|
67
|
+
### Maintenance Considerations
|
|
68
|
+
Choose operator positioning patterns that remain clear and maintainable as expressions grow in complexity over time.
|
|
69
|
+
|
|
70
|
+
## Anti-Patterns
|
|
71
|
+
|
|
72
|
+
### Avoid These Approaches
|
|
73
|
+
- **Inconsistent positioning**: Mixing operator placement styles within the same codebase
|
|
74
|
+
- **Poor alignment**: Misaligned continuation lines that create visual confusion
|
|
75
|
+
- **Trailing operators**: Placing operators at the end of lines where they're less visible
|
|
76
|
+
- **Random line breaks**: Breaking lines without considering logical expression structure
|
|
77
|
+
- **Ignored formatting tools**: Manual formatting instead of automated consistency
|
|
78
|
+
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Boolean Expression Simplification in AL"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["boolean-expressions", "code-simplification", "readability", "performance", "refactoring"]
|
|
7
|
+
prerequisites: ["al-syntax-basics", "conditional-logic"]
|
|
8
|
+
samples: "samples/boolean-simplification-examples.md"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Boolean Expression Simplification in AL
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
Complex boolean expressions in AL code often become difficult to read, maintain, and debug. Systematic simplification techniques improve code clarity while maintaining logical correctness and often enhancing performance.
|
|
16
|
+
|
|
17
|
+
**Core Principle**: Simplify boolean expressions to their most readable form while preserving exact logical behavior.
|
|
18
|
+
|
|
19
|
+
## Simplification Principles
|
|
20
|
+
|
|
21
|
+
### De Morgan's Laws Application
|
|
22
|
+
Transform complex negations using logical equivalencies:
|
|
23
|
+
- **NOT (A AND B) = (NOT A) OR (NOT B)**
|
|
24
|
+
- **NOT (A OR B) = (NOT A) AND (NOT B)**
|
|
25
|
+
|
|
26
|
+
These transformations often reveal simpler positive conditions that improve readability.
|
|
27
|
+
|
|
28
|
+
### Short-Circuit Evaluation Optimization
|
|
29
|
+
AL evaluates boolean expressions left-to-right with short-circuiting:
|
|
30
|
+
- **AND expressions**: Place most likely false conditions first
|
|
31
|
+
- **OR expressions**: Place most likely true conditions first
|
|
32
|
+
- **Performance impact**: Expensive operations should appear later in expression
|
|
33
|
+
|
|
34
|
+
### Positive Logic Preference
|
|
35
|
+
Express conditions in positive terms when possible:
|
|
36
|
+
- **Avoid double negatives**: Replace `not (not Condition)` with `Condition`
|
|
37
|
+
- **Prefer positive checks**: Use `IsValid` instead of `not IsInvalid`
|
|
38
|
+
- **Clear intent**: Positive expressions communicate intent more directly
|
|
39
|
+
|
|
40
|
+
## Common Simplification Patterns
|
|
41
|
+
|
|
42
|
+
### Redundant Condition Elimination
|
|
43
|
+
```
|
|
44
|
+
// Complex: Redundant conditions
|
|
45
|
+
if (Status = Status::Active) and (Status <> Status::Inactive) then
|
|
46
|
+
```
|
|
47
|
+
**Simplification**: Remove redundant negative condition - if Status is Active, it cannot be Inactive.
|
|
48
|
+
|
|
49
|
+
### Range Condition Optimization
|
|
50
|
+
```
|
|
51
|
+
// Complex: Multiple range checks
|
|
52
|
+
if (Amount >= 0) and (Amount <= MaxAmount) and (Amount <> 0) then
|
|
53
|
+
```
|
|
54
|
+
**Simplification**: Combine overlapping conditions and eliminate redundancy.
|
|
55
|
+
|
|
56
|
+
### Nested Condition Flattening
|
|
57
|
+
```
|
|
58
|
+
// Complex: Deep nesting
|
|
59
|
+
if Condition1 then
|
|
60
|
+
if Condition2 then
|
|
61
|
+
if Condition3 then
|
|
62
|
+
ProcessRecord();
|
|
63
|
+
```
|
|
64
|
+
**Simplification**: Use combined boolean expression with early exit patterns.
|
|
65
|
+
|
|
66
|
+
## Refactoring Techniques
|
|
67
|
+
|
|
68
|
+
### Extract Boolean Variables
|
|
69
|
+
Replace complex inline expressions with descriptive boolean variables:
|
|
70
|
+
- **Improved readability**: Self-documenting variable names explain logic
|
|
71
|
+
- **Easier debugging**: Individual conditions can be evaluated separately
|
|
72
|
+
- **Maintainability**: Changes to logic isolated to variable assignment
|
|
73
|
+
|
|
74
|
+
### Method Extraction for Complex Logic
|
|
75
|
+
Move complex boolean expressions into dedicated functions:
|
|
76
|
+
- **Single responsibility**: Each function handles one logical concept
|
|
77
|
+
- **Reusability**: Complex conditions can be reused across objects
|
|
78
|
+
- **Testability**: Isolated boolean logic easier to unit test
|
|
79
|
+
|
|
80
|
+
### Conditional Inversion
|
|
81
|
+
Sometimes inverting conditional logic simplifies overall expression:
|
|
82
|
+
- **Guard clauses**: Use early returns to eliminate nesting
|
|
83
|
+
- **Exception handling**: Check for invalid conditions first
|
|
84
|
+
- **Default behavior**: Structure logic around normal case flow
|
|
85
|
+
|
|
86
|
+
## Performance Guidelines
|
|
87
|
+
|
|
88
|
+
Order expressions strategically with expensive operations last, leverage short-circuit evaluation, and always check for null/empty conditions first.
|
|
89
|
+
|
|
90
|
+
## Readability Guidelines
|
|
91
|
+
|
|
92
|
+
Use meaningful variable names, logical grouping with parentheses, and consistent team formatting standards for boolean expressions.
|
|
93
|
+
|
|
94
|
+
## Best Practices
|
|
95
|
+
|
|
96
|
+
Use truth table analysis for complex expressions, recognize common AL patterns, and ensure behavioral testing preserves original logic during simplification.
|
|
97
|
+
|
|
98
|
+
*Complete simplification examples: samples/boolean-simplification-examples.md*
|
|
99
|
+
*AL performance patterns: roger-reviewer-index.json#performance-optimization*
|
|
100
|
+
*Refactoring techniques: code-design-index.json#refactoring-patterns*
|