bcquality/microsoft/knowledge/performance
Jesper Schulz-Wedde 31b9949235 Strengthen al-code-review execution, propagate suggested-code to leaves, two new KB articles
Driven by a parity comparison between BCAppsBCQuality PR #27 and
BCAppsCampAIRHack PR #162 on byte-identical content:

| | BCQuality | AIRHack |
|--|--|--|
| Total findings | 6 | 10 |
| Performance   | 0 | 4 |
| Security      | 0 | 5 |

Standalone runs of al-security-review and al-performance-review against
the SAME diff produced the expected matches (rimd-on-read-only via
inherent-permissions-minimal-grant; redundant-Get via
avoid-redundant-get-when-record-already-loaded). The miss in the live
run is therefore not a knowledge-coverage gap and not a worklist
filtering issue. It is attention dilution inside the al-code-review
super-skill, which the model collapses into one rolled-up generation
pass on real-size PRs.

Changes:

microsoft/skills/review/al-code-review.md
- New 'Execution discipline (mandatory)' subsection in the Action step
  that explicitly forbids collapsing leaves into one shared reasoning
  pass and requires each sub-skill to walk its Source -> Relevance ->
  Worklist -> Action steps as its own iteration before the next leaf
  starts.
- Self-review pass is now described as the final, mandatory iteration
  with a concrete candidate-category checklist (architecture-level
  smells, error-handling gaps, magic constants, privacy/telemetry,
  resource lifecycle). Returning zero agent findings on a real-size
  diff is explicitly defined as a defect.

microsoft/skills/review/al-{security,performance,privacy,style,
                              upgrade,ui}-review.md
- Each leaf skill now states that when an unambiguous .good.al
  companion exists, findings[].suggested-code should carry the
  literal replacement for the source lines. Closes the
  one-click-suggestion gap created when BCQ#19 only updated
  al-code-review.

microsoft/knowledge/security/case-must-handle-unknown-enum-values.{md,
                                                            bad.al,
                                                            good.al}
- New article: case over a security-sensitive enum (Authentication
  Type, Authorization Mode, Identity Provider, Permission Scope,
  Encryption Algorithm) MUST have an else arm. Without it, an unknown
  enum value silently falls through and the security context never
  initialises. The bad sample is lifted from the SharePoint Graph
  helper that triggered the parity finding.

microsoft/knowledge/performance/instream-length-unreliable-for-bc-
                                                   streams.{md,bad,good}
- New article: InStream.Length returns 0 / partial for HTTP-response
  streams and some file-API streams, breaking size-threshold branching
  in upload code. Bad sample is the simple-vs-chunked Graph upload
  pattern; good sample materialises into a Temp Blob first.

Companion change: microsoft/BCAppsBCQuality#28 extends the
orchestrator's bootstrap prompt with the same per-iteration execution
discipline and adds a CI warning when a >5-file PR returns zero agent
findings (regression signal).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-28 10:48:32 +02:00
..
addloadfields-in-report-onpredataitem.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
addloadfields-in-report-onpredataitem.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
addloadfields-in-report-onpredataitem.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
admin-and-migration-pages-tolerate-lower-perf.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
apply-filters-before-iterating.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
apply-filters-before-iterating.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
apply-filters-before-iterating.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
apply-guards-before-get.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
apply-guards-before-get.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
apply-guards-before-get.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-commit-inside-loops.bad.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
avoid-commit-inside-loops.good.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
avoid-commit-inside-loops.md Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
avoid-get-inside-loop-on-large-table.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-get-inside-loop-on-large-table.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-get-inside-loop-on-large-table.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-recordref-in-hot-loop.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-recordref-in-hot-loop.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-recordref-in-hot-loop.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-redundant-get-when-record-already-loaded.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-redundant-get-when-record-already-loaded.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-redundant-get-when-record-already-loaded.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-user-prompts-inside-transactions.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-user-prompts-inside-transactions.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
avoid-user-prompts-inside-transactions.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
calcsums-instead-of-calcfields-in-loop.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
calcsums-instead-of-calcfields-in-loop.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
calcsums-instead-of-calcfields-in-loop.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
codeunit-run-as-atomic-sub-operation.bad.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
codeunit-run-as-atomic-sub-operation.good.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
codeunit-run-as-atomic-sub-operation.md Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
codeunit-run-requires-prior-commit-inside-transaction.bad.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
codeunit-run-requires-prior-commit-inside-transaction.good.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
codeunit-run-requires-prior-commit-inside-transaction.md Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
do-not-locktable-in-read-only-procedure.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-locktable-in-read-only-procedure.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-locktable-in-read-only-procedure.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-modify-in-onaftergetrecord.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-modify-in-onaftergetrecord.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-modify-in-onaftergetrecord.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-remove-sourcetabletemporary-from-api-page.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-remove-sourcetabletemporary-from-api-page.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
do-not-remove-sourcetabletemporary-from-api-page.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
findset-true-applies-updlock-on-read.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
findset-true-applies-updlock-on-read.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
findset-true-applies-updlock-on-read.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
flowfield-source-key-needs-sumindexfields.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
flowfield-source-key-needs-sumindexfields.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
flowfield-source-key-needs-sumindexfields.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
guard-event-subscribers-before-db-call.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
guard-event-subscribers-before-db-call.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
guard-event-subscribers-before-db-call.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
instream-length-unreliable-for-bc-streams.bad.al Strengthen al-code-review execution, propagate suggested-code to leaves, two new KB articles 2026-05-28 10:48:32 +02:00
instream-length-unreliable-for-bc-streams.good.al Strengthen al-code-review execution, propagate suggested-code to leaves, two new KB articles 2026-05-28 10:48:32 +02:00
instream-length-unreliable-for-bc-streams.md Strengthen al-code-review execution, propagate suggested-code to leaves, two new KB articles 2026-05-28 10:48:32 +02:00
maintainsqlindex-false-breaks-flowfield-sift.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
maintainsqlindex-false-breaks-flowfield-sift.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
pair-findset-with-next-loop.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
pair-findset-with-next-loop.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
pair-findset-with-next-loop.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
pass-false-to-insert-when-trigger-not-needed.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
pass-false-to-insert-when-trigger-not-needed.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-dictionary-over-temporary-table-for-lookups.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-modifyall-over-per-row-modify.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-modifyall-over-per-row-modify.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-modifyall-over-per-row-modify.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-readisolation-over-locktable-for-reads.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-readisolation-over-locktable-for-reads.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
prefer-readisolation-over-locktable-for-reads.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
production-scale-tables-warrant-extra-analysis.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
setcurrentkey-aligns-key-with-filters.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
setcurrentkey-aligns-key-with-filters.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
singleton-setup-tables-need-no-access-optimization.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
temporary-tables-have-no-database-cost.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
triggers-and-media-field-regress-modifyall.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
understand-implicit-transaction-boundary.md Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
use-get-instead-of-findfirst-on-full-primary-key.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-get-instead-of-findfirst-on-full-primary-key.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-get-instead-of-findfirst-on-full-primary-key.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-isempty-for-existence-check.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-isempty-for-existence-check.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-isempty-for-existence-check.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-setloadfields-for-partial-records.bad.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-setloadfields-for-partial-records.good.al Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-setloadfields-for-partial-records.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-textbuilder-for-string-concatenation-in-loops.md Regenerate microsoft/knowledge from upstream BCApps instructions 2026-05-21 09:53:09 +02:00
use-tryfunction-for-error-catching-not-rollback.bad.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
use-tryfunction-for-error-catching-not-rollback.good.al Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00
use-tryfunction-for-error-catching-not-rollback.md Transaction and error handling in BC AL - new knowledge articles 2026-04-23 20:58:02 +03:00