mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 06:36:55 +01:00
* knowledge(breaking-changes): exclude appended event parameters from the signature-change rule The article's detection guidance flags 'a parameter added' on any shipped procedure. Applied to an event publisher that is bound to rather than called, this produced a false positive on BCApps PR 10278, where a trailing var parameter was appended to the existing IntegrationEvent OnAfterOpenForRecRef and the developer twice replied that adding a parameter to an existing integration event is not a breaking change. It also contradicted events/add-new-event-parameters-at-the-end, which already states that existing subscribers still bind to the leading parameters. Scope the rule to called procedures, carve out appended event parameters as additive, and keep every other event signature edit - removal, reorder, retype, var flip - in scope. Point the IsHandled case at events/do-not-add-ishandled-to-an-existing-event, which owns that semantic concern. * fix: event parameter additions are additive at any position, not only when appended The first revision justified the carve-out with leading-prefix binding and limited it to parameters appended at the end. Verified against shipping BCApps code that AL binds subscriber parameters by name, not position, so an added parameter is additive wherever it is placed. Also corrects the cross-reference to events/adding-a-parameter-to-an-event-is-not-a-breaking-change, which already states this rule, and drops reordering from the list of edits that break binding. * Route event signature edits to the analyzer-backed events article Address review feedback: name AS0025, AS0063 and AS0077 for the var and rename cases instead of claiming them in the breaking-changes article, and point at events/treat-local-and-internal-events-as-subscriber-contracts which already owns them. --------- Co-authored-by: wenjiefan <wenjiefan@microsoft.com> |
||
|---|---|---|
| .. | ||
| choose-access-modifiers-deliberately.bad.al | ||
| choose-access-modifiers-deliberately.good.al | ||
| choose-access-modifiers-deliberately.md | ||
| deprecate-public-members-with-the-obsolete-lifecycle.bad.al | ||
| deprecate-public-members-with-the-obsolete-lifecycle.good.al | ||
| deprecate-public-members-with-the-obsolete-lifecycle.md | ||
| do-not-change-published-procedure-signatures.bad.al | ||
| do-not-change-published-procedure-signatures.good.al | ||
| do-not-change-published-procedure-signatures.md | ||
| do-not-expose-sensitive-data-through-public-api.bad.al | ||
| do-not-expose-sensitive-data-through-public-api.good.al | ||
| do-not-expose-sensitive-data-through-public-api.md | ||
| do-not-modify-code-already-marked-obsolete.bad.al | ||
| do-not-modify-code-already-marked-obsolete.good.al | ||
| do-not-modify-code-already-marked-obsolete.md | ||
| namespace-is-part-of-published-object-identity.bad.al | ||
| namespace-is-part-of-published-object-identity.good.al | ||
| namespace-is-part-of-published-object-identity.md | ||
| obsolete-table-fields-instead-of-deleting-them.bad.al | ||
| obsolete-table-fields-instead-of-deleting-them.good.al | ||
| obsolete-table-fields-instead-of-deleting-them.md | ||
| relocating-a-field-to-a-tableextension-is-not-a-deletion.md | ||
| unreleased-symbol-change-is-not-a-breaking-change.md | ||