bcquality/microsoft/skills/review/al-query-review.md
Jesper Schulz-Wedde 186d8a1314
Some checks failed
Validate knowledge index / validate-index (push) Has been cancelled
Validate AL review fixtures / validate-review-fixtures (push) Has been cancelled
Validate frontmatter and structure / validate (push) Has been cancelled
Complete AL review knowledge readiness (#108)
* Complete AL review knowledge readiness

Fill telemetry and Query coverage, strengthen thin review domains, correct audited content defects, and add deterministic cheap-model evaluation and reference-integrity safeguards.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9825b012-e653-496a-9310-c1f4b6f8ac27

* Generalize review fixture discovery

Derive smoke cases from the leaf, domain, and paired-sample conventions so new leaves require no scoring-contract changes. Keep only exceptional selection/context overrides and fail when retrieval metadata cannot rank the selected article.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9825b012-e653-496a-9310-c1f4b6f8ac27

* Preserve published field IDs in sample

Keep the existing Email and Contact Email field IDs unchanged, clarify that the sample represents an independent baseline, and use a local breaking-change rule for the generic smoke evaluation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9825b012-e653-496a-9310-c1f4b6f8ac27

* Clarify published field identity rules

State explicitly that a published field keeps its ID, name, and type while a replacement is added as a separate field under an unused ID.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9825b012-e653-496a-9310-c1f4b6f8ac27

* Align field obsoletion sample baselines

Use Email field ID 3 as the shared baseline so the bad example demonstrates a same-ID rename while the good example retains the original field and adds a separate replacement.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9825b012-e653-496a-9310-c1f4b6f8ac27

---------

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
2026-07-15 10:55:25 +02:00

3.1 KiB

kind id version title description inputs outputs bc-version technologies countries application-area
action-skill al-query-review 1 AL Query review Reviews AL Query objects and Query instance usage against BCQuality guidance.
pr-diff
file-path
findings-report
all
al
w1
all

AL Query review

Reviews AL source changes against the query knowledge domain in BCQuality. This is a leaf action skill composed by al-code-review.

Source

Read knowledge-index.json once and take entries whose domain is query across enabled layers. Open an article body only after it enters the Worklist. If the index is unavailable, discover */knowledge/query/*.md by path.

Relevance

Apply READ's frontmatter matching rules against the task context. Use the target version from app.json when available and [al] for technologies. Retain conditionally applicable files only when configured; cap resulting confidence at medium and name every unknown dimension in the finding message.

Return not-applicable when the input contains no Query object declaration and no Query variable method call.

Worklist

Match relevant entries against changed query objects, variables typed as Query, and the tokens QueryType, dataitem, column, DataItemLink, SqlJoinType, SetFilter, SetRange, Open, Read, Close, and Clear.

The following targeted checks cover every current query article:

  • SetFilter or SetRange occurs after Open() without a new Open() before the next Read()set-query-filters-before-open.
  • An already-open query is opened again as if that advanced the cursor, or a query variable is reused for an independent operation without Clear even though old filters must not carry over — reopening-query-resets-cursor-but-keeps-filters.

Resolve layer conflicts per READ. When no query knowledge exists, emit no-knowledge; when knowledge exists but no article matches the changed Query usage, emit completed with no findings.

Action

Evaluate every worklist article against the diff's Query call order and surrounding control flow.

  • Emit major for an unambiguous Anti Pattern that can close the dataset, restart processing, or retain an unintended filter.
  • Emit minor when code contradicts a Best Practice but the resulting behavior depends on unseen control flow.
  • Do not emit applicability-only information. A Query article produces a finding only when the changed code violates its normative guidance.

Set confidence to high for a locally visible call sequence and medium when aliases, helper calls, or missing context obscure the sequence. Domain-scoped agent findings follow DO's precision bar and remain capped at minor/medium.

Provide suggested-code only when moving a filter before Open() or adding Clear is a complete, local, unambiguous replacement. Otherwise set suggested-code-omission-reason.

Outcome selection follows DO: completed, no-knowledge, not-applicable, partial, or failed.

Output

Output conforms to the DO findings-report contract. Every finding this skill emits MUST set findings[].domain to "Query".