bcquality/microsoft/knowledge/upgrade/obsoletereason-need-not-restate-removal-version.md
wenjiefan c618071ea6 knowledge: add 3 FP-suppression guards from BC apps negative feedback
- upgrade/obsoletereason-need-not-restate-removal-version: ObsoleteTag carries the version; do not flag ObsoleteReason for omitting it (PR 8290)

- error-handling/unchecked-get-throws-when-record-not-found: a bare Rec.Get() errors on missing record; it is not silently ignored (PR 8584)

- performance/onaftergetcurrrecord-is-not-per-row: OnAfterGetCurrRecord fires on selection change, not per row; CalcFields there is not N+1 (PR 8617)
2026-07-21 09:45:09 +02:00

1.7 KiB

bc-version domain keywords technologies countries application-area
all
upgrade
obsolete-reason
obsolete-tag
deprecation
version
metadata
false-positive
al
w1
all

ObsoleteReason need not restate the removal version; ObsoleteTag carries it

Description

An obsoleted object, field, key, enum, or enum value carries both ObsoleteReason and ObsoleteTag, and the two properties have different jobs. ObsoleteReason is free text that explains why the element is obsolete and what replaces it. ObsoleteTag identifies when it became obsolete — typically the version, release, or work item that introduced the obsoletion. The version traceability lives in ObsoleteTag; there is no requirement that ObsoleteReason also name the removal version or repeat what the tag already records. A reason that omits a version number is complete as long as it explains the deprecation and points to a replacement, provided ObsoleteTag pins the version.

Best Practice

When ObsoleteTag already carries the version or tracking reference, do not flag ObsoleteReason for not mentioning a version or removal release. Judge ObsoleteReason on whether it explains the deprecation and names a replacement, and judge version traceability on ObsoleteTag instead.

Anti Pattern

Flagging an ObsoleteReason as vague, incomplete, or missing a version reference solely because it does not restate the removal version, when ObsoleteTag already records that version. Requiring the reason to duplicate the tag's version is not a real convention.

See also

  • obsoletion-requires-reason-and-tag.md — both properties are required; the reason names the replacement and the tag identifies when the element became obsolete.