mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 09:26:52 +01:00
Add [all] sentinel to bc-version; apply to version-agnostic knowledge
Most of the corpus — FindSet/SetLoadFields/CalcFields patterns, permission sets, SingleInstance codeunits, DataClassification, IsolatedStorage, transaction scope, SecretText — describes BC platform behaviour that is identical across supported versions. The seed [26..28] range on every file implied a version-specificity the content does not actually have, and there was no way to express "applies to every version" in the schema the way [w1] and [all] already do for countries and application-area. Extend the v1 schema with a universal sentinel for bc-version, parallel to the sentinels already defined for the other dimensions: bc-version: [all] # applies to every BC version [all] is mutually exclusive with explicit versions. Range shorthand ([26..28]) and explicit lists ([26, 27, 28]) continue to work for files genuinely tied to a version-gated API or deprecation. Update read.md (field definition, matching semantics, partial-context rule), write.md (default to [all], use ranges only with a concrete reason), README.md (frontmatter example), and the CI validator. All forty existing knowledge files and the three action skills convert to [all]; none of the current content is version-gated. Validator passes.
This commit is contained in:
parent
23184480d0
commit
9a4198eb28
52 changed files with 68 additions and 58 deletions
15
.github/scripts/validate_frontmatter.py
vendored
15
.github/scripts/validate_frontmatter.py
vendored
|
|
@ -145,10 +145,19 @@ def is_non_empty_list_of_str(value: Any) -> bool:
|
|||
return isinstance(value, list) and len(value) > 0 and all(isinstance(v, str) and v for v in value)
|
||||
|
||||
|
||||
def expand_bc_version(value: Any) -> tuple[list[int] | None, str | None]:
|
||||
"""Return (expanded-list, error-message). One of the two is None."""
|
||||
def expand_bc_version(value: Any) -> tuple[list[int] | str | None, str | None]:
|
||||
"""Return (expanded, error-message). One of the two is None.
|
||||
|
||||
For the universal sentinel ["all"], `expanded` is the string "all".
|
||||
Otherwise it is the expanded list of version integers.
|
||||
"""
|
||||
if not isinstance(value, list) or not value:
|
||||
return None, "must be a non-empty list"
|
||||
# Case 0: universal sentinel
|
||||
if len(value) == 1 and value[0] == "all":
|
||||
return "all", None
|
||||
if "all" in value:
|
||||
return None, "'all' is mutually exclusive with explicit versions"
|
||||
# Case 1: all integers
|
||||
if all(isinstance(v, int) and not isinstance(v, bool) for v in value):
|
||||
if any(v <= 0 for v in value):
|
||||
|
|
@ -162,7 +171,7 @@ def expand_bc_version(value: Any) -> tuple[list[int] | None, str | None]:
|
|||
if start > end:
|
||||
return None, f"range '{value[0]}' is not ascending"
|
||||
return list(range(start, end + 1)), None
|
||||
return None, "must be a list of integers or a single-element range shorthand like [26..28]"
|
||||
return None, "must be [all], a list of integers, or a single-element range shorthand like [26..28]"
|
||||
|
||||
|
||||
def headings_in_order(body: str) -> list[tuple[str, int]]:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue