Add FP guards: field relocation to tableextension + event parameter addition (bug 642303) - #124
Merged
Conversation
…ter addition Two knowledge false-positive guards addressing bug 642303 (agent FPs on BCApps PR #9607): - breaking-changes: relocating a field to a tableextension in the same app under the same field ID/name is a relocation, not a deletion/rename; the field still resolves on the table, so it must not be flagged as a deleted shipped field or require ObsoleteState staging. Scoped to the contract axis; silent on data migration. - events: adding a parameter to an event publisher does not break existing subscribers (subscribers bind by name and match a subset), so the addition itself must not be reported as a breaking signature change.
gggdttt
requested review from
AleksandricMarko,
JesperSchulz and
pchriste-microsoft-com
as code owners
August 4, 2026 08:41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two knowledge false-positive guards that resolve the agent false positives reported in bug 642303, reproduced on BCApps PR #9607 (a deliberate "Test-Code-Reviewer-Comments" PR).
1.
breaking-changes/relocating-a-field-to-a-tableextension-is-not-a-deletion.mdMoving a field out of a base table (or a base-app layer modification of one) into a
tableextensionthat extends the same table, within the same app and keeping the same field ID and name, is a relocation — not a deletion or rename. The field still resolves on the table (Rec."Field Name"and the ID compile exactly as before), so dependent code is not broken and the obsoletion lifecycle does not apply.The agent misread the two-sided diff (field removed from the base object, re-declared in the tableextension under the same ID) as a deleted shipped field re-added illegally, and demanded
ObsoleteState = Pendingstaging viaobsolete-table-fields-instead-of-deleting-them/obsolete-pending-to-removed-staging.Scope: contract axis only. The guard says the move is not a deletion/rename and needs no obsoletion. It stays deliberately silent on data migration, so genuine data-loss findings on tables with persisted data are not masked.
2.
events/adding-a-parameter-to-an-event-is-not-a-breaking-change.mdAdding a parameter to an event publisher does not break existing subscribers: AL binds subscribers by event name and matches their parameter list as a subset by name/type, so a subscriber that does not declare the new parameter keeps compiling and binding. The addition itself must not be reported as a breaking signature change. Complements the existing
add-new-event-parameters-at-the-end(which covers the append-position concern).Repro (PR #9607)
Testparameter appended to local eventOnAfterCopyFromDeferralPostBuffer.Notes
false-positiveinkeywords,## Description+## Best Practice, no sibling.al, no## Anti Pattern.knowledge-index.jsonregenerated locally (252 articles, both new slugs present); not committed (gitignored).Refs: AB#642303.