Add Job Queue reliability and scheduling guidance (#148)
Some checks are pending
Validate knowledge index / validate-index (push) Waiting to run
Validate AL review fixtures / validate-review-fixtures (push) Waiting to run
Validate frontmatter and structure / validate (push) Waiting to run

* knowledge(performance): add job queue reliability guidance

* Address Job Queue review feedback

* Address Job Queue routing review feedback

* Encode job queue conflict in fixtures
This commit is contained in:
Stefano Demiliani 2026-09-14 12:44:30 +02:00 • committed by GitHub
parent 45ac371e7a
commit 8c26ba4e76
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 574 additions and 25 deletions

View file

@ -195,12 +195,42 @@ foreach ($domain in $leafDomains) {
}
$override = if ($overrides.ContainsKey($domain)) { $overrides[$domain] } else { $null }
$selectedArticle = $null
if ($override -and ($override.PSObject.Properties.Name -contains 'article')) {
$articleName = [string]$override.article
$hasArticleOverride = $override -and ($override.PSObject.Properties.Name -contains 'article')
$hasArticlesOverride = $override -and ($override.PSObject.Properties.Name -contains 'articles')
if ($hasArticleOverride -and $hasArticlesOverride) {
$problems.Add("${domain}: override must specify either 'article' or 'articles', not both.") | Out-Null
continue
}
$articleNames = @()
if ($hasArticlesOverride) {
$articleNames = @($override.articles)
if (-not $articleNames.Count) {
$problems.Add("${domain}: override 'articles' must contain at least one article.") | Out-Null
continue
}
} elseif ($hasArticleOverride) {
$articleNames = @($override.article)
} else {
$articleNames = @($articles | Select-Object -First 1 | ForEach-Object BaseName)
}
$selectedArticles = [System.Collections.Generic.List[object]]::new()
$seenArticleNames = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase)
foreach ($articleNameValue in $articleNames) {
if ($articleNameValue -isnot [string] -or [string]::IsNullOrWhiteSpace([string]$articleNameValue)) {
$problems.Add("${domain}: override article names must be non-empty strings.") | Out-Null
continue
}
$articleName = [string]$articleNameValue
if ($articleName.EndsWith('.md')) {
$articleName = [System.IO.Path]::GetFileNameWithoutExtension($articleName)
}
if (-not $seenArticleNames.Add($articleName)) {
$problems.Add("${domain}: override contains duplicate article: $articleName.md") | Out-Null
continue
}
$selectedArticle = $articles | Where-Object BaseName -eq $articleName | Select-Object -First 1
if (-not $selectedArticle) {
$articleExists = @(
@ -218,32 +248,41 @@ foreach ($domain in $leafDomains) {
}
continue
}
} else {
$selectedArticle = $articles | Select-Object -First 1
$selectedArticles.Add($selectedArticle) | Out-Null
}
if (-not $selectedArticle) {
$problems.Add("${domain}: no article has both .good.al and .bad.al companion samples.") | Out-Null
if (-not $selectedArticles.Count) {
if (-not $articleNames.Count) {
$problems.Add("${domain}: no article has both .good.al and .bad.al companion samples.") | Out-Null
}
continue
}
$articlePath = [string]$selectedArticle.ArticlePath
$sampleDirectory = (Split-Path -Parent $articlePath).Replace('\', '/')
$context = if ($override -and ($override.PSObject.Properties.Name -contains 'context')) {
[string]$override.context
} else {
$null
}
foreach ($kind in 'bad', 'good') {
$case = [pscustomobject]@{
id = "$domain-$kind"
domain = $domain
input = "$sampleDirectory/$($selectedArticle.BaseName).$kind.al"
expected = if ($kind -eq 'bad') { @($articlePath) } else { @() }
for ($articleIndex = 0; $articleIndex -lt $selectedArticles.Count; $articleIndex++) {
$selectedArticle = $selectedArticles[$articleIndex]
$articlePath = [string]$selectedArticle.ArticlePath
$sampleDirectory = (Split-Path -Parent $articlePath).Replace('\', '/')
foreach ($kind in 'bad', 'good') {
$caseId = if ($articleIndex -eq 0) {
"$domain-$kind"
} else {
"$domain-$($selectedArticle.BaseName)-$kind"
}
$case = [pscustomobject]@{
id = $caseId
domain = $domain
input = "$sampleDirectory/$($selectedArticle.BaseName).$kind.al"
expected = if ($kind -eq 'bad') { @($articlePath) } else { @() }
}
if ($context) {
$case | Add-Member -NotePropertyName context -NotePropertyValue $context
}
$caseList.Add($case) | Out-Null
}
if ($context) {
$case | Add-Member -NotePropertyName context -NotePropertyValue $context
}
$caseList.Add($case) | Out-Null
}
}
$cases = @($caseList)