---
id: change/bcquality/178
type: change
title: "#178 Separate deterministic analyzer rules from BCQuality"
summary: Deterministic analyzer rules and their documentation are removed from BCQuality, leaving only knowledge that adds BC-specific context beyond what the compiler already enforces.
tier: official
language: en
tags:
  - refactor
  - main
system: development
review:
  state: reviewed
  by: opus
  at: "2026-10-08T02:05:35.391Z"
  flags: []
generated:
  at: "2026-10-08T01:26:53.141Z"
  pipeline: 0.2.0
  prompts:
    extract-change: 1
  input_hash: c12b2f0a88c7316b82d2c9e01dfb8518a9eb6eea
evidence:
  - kind: code
    url: https://github.com/microsoft/BCQuality/pull/178
    title: "microsoft/BCQuality#178: Separate deterministic analyzer rules from BCQuality"
    date: "2026-09-11"
    commit: c12b2f0a88c7316b82d2c9e01dfb8518a9eb6eea
    t: null
    quote: deterministic tooling establishes mechanical facts; BCQuality and the LLM focus on BC-specific context and reasoning
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes: []
number: 178
repo: microsoft/BCQuality
source_id: bcquality-prs
url: https://github.com/microsoft/BCQuality/pull/178
kind: pr
base_branch: main
major: null
merged_at: "2026-09-11T07:26:15Z"
author: JesperSchulz
author_type: User
community_contribution: false
labels: []
change_class: code
change_kind: refactor
behavior_change: true
breaking: false
files:
  count: 60
  additions: 45
  deletions: 1095
  al: 55
apps: []
objects_touched: []
objects_unjoined:
  - path: microsoft/knowledge/appsource/object-affixes-prevent-collisions.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/appsource/object-affixes-prevent-collisions.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/appsource/object-affixes-prevent-collisions.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/breaking-changes/namespace-is-part-of-published-object-identity.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/breaking-changes/namespace-is-part-of-published-object-identity.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/breaking-changes/namespace-is-part-of-published-object-identity.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/applicationarea-required-on-page-controls.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/applicationarea-required-on-page-controls.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/applicationarea-required-on-page-controls.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/begin-on-same-line-as-then-else-do.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/begin-on-same-line-as-then-else-do.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/begin-on-same-line-as-then-else-do.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/block-keywords-start-new-line.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/block-keywords-start-new-line.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/block-keywords-start-new-line.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/event-subscriber-param-names-match-publisher.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/function-call-parentheses-required.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/function-call-parentheses-required.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/function-call-parentheses-required.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/label-suffix-approved-list.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/label-suffix-approved-list.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/label-suffix-approved-list.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/lowercase-reserved-keywords.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/lowercase-reserved-keywords.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/lowercase-reserved-keywords.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/no-begin-end-around-single-statement.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/no-begin-end-around-single-statement.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/no-begin-end-around-single-statement.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/no-space-before-method-parenthesis.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/no-space-before-method-parenthesis.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/no-space-before-method-parenthesis.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/optioncaption-required-and-matches-membercount.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/optioncaption-required-and-matches-membercount.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/optioncaption-required-and-matches-membercount.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/single-space-after-not-operator.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/single-space-after-not-operator.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/single-space-after-not-operator.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/single-space-around-binary-operators.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/single-space-around-binary-operators.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/single-space-around-binary-operators.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/this-keyword-in-codeunits.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/this-keyword-in-codeunits.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/this-keyword-in-codeunits.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/variable-declaration-order-by-type.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/variable-declaration-order-by-type.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/variable-declaration-order-by-type.md
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/variable-name-must-not-shadow.bad.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/variable-name-must-not-shadow.good.al
    status: removed
    reason: removed
  - path: microsoft/knowledge/style/variable-name-must-not-shadow.md
    status: removed
    reason: removed
  - path: microsoft/skills/review/al-appsource-review.md
    status: modified
    reason: not-in-snapshot
  - path: microsoft/skills/review/al-breaking-changes-review.md
    status: modified
    reason: not-in-snapshot
  - path: microsoft/skills/review/al-style-review.md
    status: modified
    reason: not-in-snapshot
obsoletions: []
backports: []
fixes_issues: []
work_items: []
systems:
  - development
  - platform
quote: deterministic tooling establishes mechanical facts; BCQuality and the LLM focus on BC-specific context and reasoning
joined_against:
  major: null
  commit: null
---

# #178 Separate deterministic analyzer rules from BCQuality

> Deterministic analyzer rules and their documentation are removed from BCQuality, leaving only knowledge that adds BC-specific context beyond what the compiler already enforces.

[Pull request](https://github.com/microsoft/BCQuality/pull/178) · merged into `main` on 2026-09-11 by JesperSchulz · 60 files (+45 -1095), 55 AL · refactor · tier official · reviewed (checked by Opus)

## What changed

- 18 deterministic rules and their samples are retired, including CodeCop formatting and style rules, AS0062, AS0011, AS0007 and compiler-enforced subscriber parameter matching
- The Style, AppSource and Breaking Changes review skills no longer contain detection or example logic for these rules
- The admission test now excludes compiler and analyzer duplicates for both review and authoring
- Analyzer-related knowledge stays only when it adds exceptions, version boundaries, cross-object implications or remediation constraints
- Deterministic tooling handles mechanical facts, while BCQuality focuses on BC-specific reasoning
- Behaviour changes for users or extensions.

## AL objects touched

- `microsoft/knowledge/appsource/object-affixes-prevent-collisions.bad.al`: removed
- `microsoft/knowledge/appsource/object-affixes-prevent-collisions.good.al`: removed
- `microsoft/knowledge/appsource/object-affixes-prevent-collisions.md`: removed
- `microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.bad.al`: removed
- `microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.good.al`: removed
- `microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.md`: removed
- `microsoft/knowledge/breaking-changes/namespace-is-part-of-published-object-identity.bad.al`: removed
- `microsoft/knowledge/breaking-changes/namespace-is-part-of-published-object-identity.good.al`: removed
- `microsoft/knowledge/breaking-changes/namespace-is-part-of-published-object-identity.md`: removed
- `microsoft/knowledge/style/applicationarea-required-on-page-controls.bad.al`: removed
- `microsoft/knowledge/style/applicationarea-required-on-page-controls.good.al`: removed
- `microsoft/knowledge/style/applicationarea-required-on-page-controls.md`: removed
- `microsoft/knowledge/style/begin-on-same-line-as-then-else-do.bad.al`: removed
- `microsoft/knowledge/style/begin-on-same-line-as-then-else-do.good.al`: removed
- `microsoft/knowledge/style/begin-on-same-line-as-then-else-do.md`: removed
- `microsoft/knowledge/style/block-keywords-start-new-line.bad.al`: removed
- `microsoft/knowledge/style/block-keywords-start-new-line.good.al`: removed
- `microsoft/knowledge/style/block-keywords-start-new-line.md`: removed
- `microsoft/knowledge/style/event-subscriber-param-names-match-publisher.md`: removed
- `microsoft/knowledge/style/function-call-parentheses-required.bad.al`: removed
- `microsoft/knowledge/style/function-call-parentheses-required.good.al`: removed
- `microsoft/knowledge/style/function-call-parentheses-required.md`: removed
- `microsoft/knowledge/style/label-suffix-approved-list.bad.al`: removed
- `microsoft/knowledge/style/label-suffix-approved-list.good.al`: removed
- `microsoft/knowledge/style/label-suffix-approved-list.md`: removed
- `microsoft/knowledge/style/lowercase-reserved-keywords.bad.al`: removed
- `microsoft/knowledge/style/lowercase-reserved-keywords.good.al`: removed
- `microsoft/knowledge/style/lowercase-reserved-keywords.md`: removed
- `microsoft/knowledge/style/no-begin-end-around-single-statement.bad.al`: removed
- `microsoft/knowledge/style/no-begin-end-around-single-statement.good.al`: removed
- `microsoft/knowledge/style/no-begin-end-around-single-statement.md`: removed
- `microsoft/knowledge/style/no-space-before-method-parenthesis.bad.al`: removed
- `microsoft/knowledge/style/no-space-before-method-parenthesis.good.al`: removed
- `microsoft/knowledge/style/no-space-before-method-parenthesis.md`: removed
- `microsoft/knowledge/style/optioncaption-required-and-matches-membercount.bad.al`: removed
- `microsoft/knowledge/style/optioncaption-required-and-matches-membercount.good.al`: removed
- `microsoft/knowledge/style/optioncaption-required-and-matches-membercount.md`: removed
- `microsoft/knowledge/style/single-space-after-not-operator.bad.al`: removed
- `microsoft/knowledge/style/single-space-after-not-operator.good.al`: removed
- `microsoft/knowledge/style/single-space-after-not-operator.md`: removed
- `microsoft/knowledge/style/single-space-around-binary-operators.bad.al`: removed
- `microsoft/knowledge/style/single-space-around-binary-operators.good.al`: removed
- `microsoft/knowledge/style/single-space-around-binary-operators.md`: removed
- `microsoft/knowledge/style/this-keyword-in-codeunits.bad.al`: removed
- `microsoft/knowledge/style/this-keyword-in-codeunits.good.al`: removed
- `microsoft/knowledge/style/this-keyword-in-codeunits.md`: removed
- `microsoft/knowledge/style/variable-declaration-order-by-type.bad.al`: removed
- `microsoft/knowledge/style/variable-declaration-order-by-type.good.al`: removed
- `microsoft/knowledge/style/variable-declaration-order-by-type.md`: removed
- `microsoft/knowledge/style/variable-name-must-not-shadow.bad.al`: removed
- `microsoft/knowledge/style/variable-name-must-not-shadow.good.al`: removed
- `microsoft/knowledge/style/variable-name-must-not-shadow.md`: removed
- `microsoft/skills/review/al-appsource-review.md`: modified, not in the BC? snapshot
- `microsoft/skills/review/al-breaking-changes-review.md`: modified, not in the BC? snapshot
- `microsoft/skills/review/al-style-review.md`: modified, not in the BC? snapshot

## Context

- Systems: development, platform
- From the description: "deterministic tooling establishes mechanical facts; BCQuality and the LLM focus on BC-specific context and reasoning"

Source: metadata of a merged pull request in microsoft/BCQuality (bcquality): title, labels, changed paths and counts, with a summary in our words. No source text and no description beyond one short quote (D10, D61).
