From 5876c62278a31cc62e1e4d107694721939c0761b Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:15:19 +0100 Subject: [PATCH 01/11] tests: fix PSSA warning space after comma and space before binary assignment operators --- src/IdLE.Core/Private/Write-IdleEvent.ps1 | 2 +- src/IdLE.Core/Public/New-IdlePlanObject.ps1 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/IdLE.Core/Private/Write-IdleEvent.ps1 b/src/IdLE.Core/Private/Write-IdleEvent.ps1 index 3bcb0fe7..0c845c86 100644 --- a/src/IdLE.Core/Private/Write-IdleEvent.ps1 +++ b/src/IdLE.Core/Private/Write-IdleEvent.ps1 @@ -20,7 +20,7 @@ function Write-IdleEvent { # # We never mutate the original event object. We emit a redacted copy. $shouldEmitToSink = ($null -ne $EventSink) - $shouldBuffer = ($null -ne $EventBuffer) + $shouldBuffer = ($null -ne $EventBuffer) $eventToEmit = $Event if ($shouldEmitToSink -or $shouldBuffer) { diff --git a/src/IdLE.Core/Public/New-IdlePlanObject.ps1 b/src/IdLE.Core/Public/New-IdlePlanObject.ps1 index 73b56bf4..8014d4e2 100644 --- a/src/IdLE.Core/Public/New-IdlePlanObject.ps1 +++ b/src/IdLE.Core/Public/New-IdlePlanObject.ps1 @@ -94,7 +94,7 @@ function New-IdlePlanObject { return $null } - $m = $Object | Get-Member -Name $Name -MemberType NoteProperty,Property -ErrorAction SilentlyContinue + $m = $Object | Get-Member -Name $Name -MemberType NoteProperty, Property -ErrorAction SilentlyContinue if ($null -eq $m) { return $null } @@ -378,7 +378,7 @@ function New-IdlePlanObject { return $Step.ContainsKey($Key) } - $m = $Step | Get-Member -Name $Key -MemberType NoteProperty,Property -ErrorAction SilentlyContinue + $m = $Step | Get-Member -Name $Key -MemberType NoteProperty, Property -ErrorAction SilentlyContinue return ($null -ne $m) } From 4360bc2440fd593f93a62b54fa2a7343ceb58a80 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:20:53 +0100 Subject: [PATCH 02/11] chore(tests): suppress false-positive unused parameter warnings for "Context", "EventBuffer" and "RedactionMarker" --- src/IdLE.Core/Private/Copy-IdleRedactedObject.ps1 | 1 + src/IdLE.Core/Private/New-IdleEventSink.ps1 | 1 + src/IdLE.Core/Private/Test-IdleCondition.ps1 | 1 + 3 files changed, 3 insertions(+) diff --git a/src/IdLE.Core/Private/Copy-IdleRedactedObject.ps1 b/src/IdLE.Core/Private/Copy-IdleRedactedObject.ps1 index 0b2022e7..6c5b1e3a 100644 --- a/src/IdLE.Core/Private/Copy-IdleRedactedObject.ps1 +++ b/src/IdLE.Core/Private/Copy-IdleRedactedObject.ps1 @@ -1,5 +1,6 @@ function Copy-IdleRedactedObject { [CmdletBinding()] + [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', 'RedactionMarker', Justification = 'Used within nested helper functions for redaction output.')] param( [Parameter()] [AllowNull()] diff --git a/src/IdLE.Core/Private/New-IdleEventSink.ps1 b/src/IdLE.Core/Private/New-IdleEventSink.ps1 index 532133c6..961e3d24 100644 --- a/src/IdLE.Core/Private/New-IdleEventSink.ps1 +++ b/src/IdLE.Core/Private/New-IdleEventSink.ps1 @@ -1,5 +1,6 @@ function New-IdleEventSink { [CmdletBinding()] + [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', 'EventBuffer', Justification = 'Passed to Write-IdleEvent via closure.')] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] diff --git a/src/IdLE.Core/Private/Test-IdleCondition.ps1 b/src/IdLE.Core/Private/Test-IdleCondition.ps1 index af6c60c5..9708a514 100644 --- a/src/IdLE.Core/Private/Test-IdleCondition.ps1 +++ b/src/IdLE.Core/Private/Test-IdleCondition.ps1 @@ -1,5 +1,6 @@ function Test-IdleCondition { [CmdletBinding()] + [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', 'Context', Justification = 'Used for path resolution within nested helper functions.')] param( [Parameter(Mandatory)] [ValidateNotNull()] From 6886dea2ba51899f019c38b9614b9de43807e389 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:24:44 +0100 Subject: [PATCH 03/11] chore(tests): interpolate idempotent/contracts values so they are used and PSSA finding solved --- tools/Generate-IdleStepReference.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/Generate-IdleStepReference.ps1 b/tools/Generate-IdleStepReference.ps1 index a58ccbfb..61a97f9d 100644 --- a/tools/Generate-IdleStepReference.ps1 +++ b/tools/Generate-IdleStepReference.ps1 @@ -209,8 +209,8 @@ function ConvertTo-IdleStepMarkdownSection { [void]$sb.AppendLine() [void]$sb.AppendLine(("- **Step Name**: `$stepType")) [void]$sb.AppendLine(("- **Implementation**: `$commandName")) - [void]$sb.AppendLine(("- **Idempotent**: `$idempotent")) - [void]$sb.AppendLine(("- **Contracts**: `$contracts")) + [void]$sb.AppendLine(("- **Idempotent**: ``{0}``" -f $idempotent)) + [void]$sb.AppendLine(("- **Contracts**: ``{0}``" -f $contracts)) [void]$sb.AppendLine(("- **Events**: Unknown")) [void]$sb.AppendLine() [void]$sb.AppendLine("**Synopsis**") From 3e69f7a7b6069af7012a07870ef7e970813e68c5 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:29:56 +0100 Subject: [PATCH 04/11] chore(tests): add write-verbose to avoid empty catch block findings from PSSA --- src/IdLE.Core/Private/Invoke-IdleWithRetry.ps1 | 3 ++- src/IdLE/IdLE.psm1 | 2 ++ tools/Generate-IdleCmdletReference.ps1 | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/IdLE.Core/Private/Invoke-IdleWithRetry.ps1 b/src/IdLE.Core/Private/Invoke-IdleWithRetry.ps1 index 5d99745b..7a8c44da 100644 --- a/src/IdLE.Core/Private/Invoke-IdleWithRetry.ps1 +++ b/src/IdLE.Core/Private/Invoke-IdleWithRetry.ps1 @@ -174,7 +174,8 @@ function Invoke-IdleWithRetry { ) } catch { - # Intentionally ignored. + # Intentionally ignored, but surfaced for diagnostics. + Write-Verbose "EventSink.WriteEvent failed: $($_.Exception.Message)" } } diff --git a/src/IdLE/IdLE.psm1 b/src/IdLE/IdLE.psm1 index ae87fe5a..b3c51e68 100644 --- a/src/IdLE/IdLE.psm1 +++ b/src/IdLE/IdLE.psm1 @@ -24,6 +24,7 @@ function Import-IdleCoreModule { } catch { # Continue with local fallback + Write-Verbose "Failed to import '$($script:IdleCoreModuleName)' from PSModulePath: $($_.Exception.Message)" } # 2) Fallback: repo clone layout (IdLE and IdLE.Core side-by-side under /src) @@ -59,6 +60,7 @@ function Import-IdleBuiltInStepsModule { } catch { # Continue with local fallback + Write-Verbose "Failed to import '$($script:IdleBuiltInStepsModuleName)' from PSModulePath: $($_.Exception.Message)" } # 2) Fallback: repo clone layout (IdLE and packs side-by-side under /src) diff --git a/tools/Generate-IdleCmdletReference.ps1 b/tools/Generate-IdleCmdletReference.ps1 index e1d8a0c7..b079d97a 100644 --- a/tools/Generate-IdleCmdletReference.ps1 +++ b/tools/Generate-IdleCmdletReference.ps1 @@ -129,6 +129,7 @@ function Get-IdleCmdletMetadata { } catch { # Missing help should not fail generation; we reflect it in the synopsis. + Write-Verbose "Help not available for '$($cmd.Name)': $($_.Exception.Message)" } $synopsis = '' From e3242121d9c6cc97485a6780b3ca833c3387f597 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:43:43 +0100 Subject: [PATCH 05/11] chore(tests): fixed PSSA findings on "Indentation not consistent" --- .../Public/Invoke-IdlePlanObject.ps1 | 190 ++++++++++++------ tools/Generate-IdleCmdletReference.ps1 | 3 +- tools/Generate-IdleStepReference.ps1 | 12 +- tools/Set-IdleModuleVersion.ps1 | 4 +- 4 files changed, 137 insertions(+), 72 deletions(-) diff --git a/src/IdLE.Core/Public/Invoke-IdlePlanObject.ps1 b/src/IdLE.Core/Public/Invoke-IdlePlanObject.ps1 index 7ef5b630..e3409041 100644 --- a/src/IdLE.Core/Public/Invoke-IdlePlanObject.ps1 +++ b/src/IdLE.Core/Public/Invoke-IdlePlanObject.ps1 @@ -316,11 +316,16 @@ function Invoke-IdlePlanObject { } } - $context.EventSink.WriteEvent('RunStarted', 'Plan execution started.', $null, @{ - CorrelationId = $corr - Actor = $actor - StepCount = @($Plan.Steps).Count - }) + $context.EventSink.WriteEvent( + 'RunStarted', + 'Plan execution started.', + $null, + @{ + CorrelationId = $corr + Actor = $actor + StepCount = @($Plan.Steps).Count + } + ) $failed = $false $stepResults = @() @@ -351,19 +356,29 @@ function Invoke-IdlePlanObject { Attempts = 1 } - $context.EventSink.WriteEvent('StepNotApplicable', "Step '$stepName' not applicable (condition not met).", $stepName, @{ - StepType = $stepType - Index = $i - }) + $context.EventSink.WriteEvent( + 'StepNotApplicable', + "Step '$stepName' not applicable (condition not met).", + $stepName, + @{ + StepType = $stepType + Index = $i + } + ) $i++ continue } - $context.EventSink.WriteEvent('StepStarted', "Step '$stepName' started.", $stepName, @{ - StepType = $stepType - Index = $i - }) + $context.EventSink.WriteEvent( + 'StepStarted', + "Step '$stepName' started.", + $stepName, + @{ + StepType = $stepType + Index = $i + } + ) try { $impl = Resolve-IdleStepHandler -StepType ([string]$stepType) -StepRegistry $stepRegistry @@ -415,19 +430,29 @@ function Invoke-IdlePlanObject { if ($result.Status -eq 'Failed') { $failed = $true - $context.EventSink.WriteEvent('StepFailed', "Step '$stepName' failed.", $stepName, @{ - StepType = $stepType - Index = $i - Error = $result.Error - }) + $context.EventSink.WriteEvent( + 'StepFailed', + "Step '$stepName' failed.", + $stepName, + @{ + StepType = $stepType + Index = $i + Error = $result.Error + } + ) break } - $context.EventSink.WriteEvent('StepCompleted', "Step '$stepName' completed.", $stepName, @{ - StepType = $stepType - Index = $i - }) + $context.EventSink.WriteEvent( + 'StepCompleted', + "Step '$stepName' completed.", + $stepName, + @{ + StepType = $stepType + Index = $i + } + ) } catch { $failed = $true @@ -442,11 +467,16 @@ function Invoke-IdlePlanObject { Attempts = 1 } - $context.EventSink.WriteEvent('StepFailed', "Step '$stepName' failed.", $stepName, @{ - StepType = $stepType - Index = $i - Error = $err.Exception.Message - }) + $context.EventSink.WriteEvent( + 'StepFailed', + "Step '$stepName' failed.", + $stepName, + @{ + StepType = $stepType + Index = $i + Error = $err.Exception.Message + } + ) break } @@ -470,9 +500,14 @@ function Invoke-IdlePlanObject { } if ($failed -and @($planOnFailureSteps).Count -gt 0) { - $context.EventSink.WriteEvent('OnFailureStarted', 'Executing OnFailureSteps (best effort).', $null, @{ - OnFailureStepCount = @($planOnFailureSteps).Count - }) + $context.EventSink.WriteEvent( + 'OnFailureStarted', + 'Executing OnFailureSteps (best effort).', + $null, + @{ + OnFailureStepCount = @($planOnFailureSteps).Count + } + ) $onFailureHadFailures = $false $onFailureStepResults = @() @@ -502,19 +537,29 @@ function Invoke-IdlePlanObject { Attempts = 1 } - $context.EventSink.WriteEvent('OnFailureStepNotApplicable', "OnFailure step '$ofName' not applicable (condition not met).", $ofName, @{ - StepType = $ofType - Index = $j - }) + $context.EventSink.WriteEvent( + 'OnFailureStepNotApplicable', + "OnFailure step '$ofName' not applicable (condition not met).", + $ofName, + @{ + StepType = $ofType + Index = $j + } + ) $j++ continue } - $context.EventSink.WriteEvent('OnFailureStepStarted', "OnFailure step '$ofName' started.", $ofName, @{ - StepType = $ofType - Index = $j - }) + $context.EventSink.WriteEvent( + 'OnFailureStepStarted', + "OnFailure step '$ofName' started.", + $ofName, + @{ + StepType = $ofType + Index = $j + } + ) try { $impl = Resolve-IdleStepHandler -StepType ([string]$ofType) -StepRegistry $stepRegistry @@ -564,17 +609,27 @@ function Invoke-IdlePlanObject { if ($result.Status -eq 'Failed') { $onFailureHadFailures = $true - $context.EventSink.WriteEvent('OnFailureStepFailed', "OnFailure step '$ofName' failed.", $ofName, @{ - StepType = $ofType - Index = $j - Error = $result.Error - }) + $context.EventSink.WriteEvent( + 'OnFailureStepFailed', + "OnFailure step '$ofName' failed.", + $ofName, + @{ + StepType = $ofType + Index = $j + Error = $result.Error + } + ) } else { - $context.EventSink.WriteEvent('OnFailureStepCompleted', "OnFailure step '$ofName' completed.", $ofName, @{ - StepType = $ofType - Index = $j - }) + $context.EventSink.WriteEvent( + 'OnFailureStepCompleted', + "OnFailure step '$ofName' completed.", + $ofName, + @{ + StepType = $ofType + Index = $j + } + ) } } catch { @@ -590,11 +645,16 @@ function Invoke-IdlePlanObject { Attempts = 1 } - $context.EventSink.WriteEvent('OnFailureStepFailed', "OnFailure step '$ofName' failed.", $ofName, @{ - StepType = $ofType - Index = $j - Error = $err.Exception.Message - }) + $context.EventSink.WriteEvent( + 'OnFailureStepFailed', + "OnFailure step '$ofName' failed.", + $ofName, + @{ + StepType = $ofType + Index = $j + Error = $err.Exception.Message + } + ) } $j++ @@ -608,17 +668,27 @@ function Invoke-IdlePlanObject { Steps = @($onFailureStepResults) } - $context.EventSink.WriteEvent('OnFailureCompleted', "OnFailureSteps finished (status: $onFailureStatus).", $null, @{ - Status = $onFailureStatus - StepCount = @($planOnFailureSteps).Count - }) + $context.EventSink.WriteEvent( + 'OnFailureCompleted', + "OnFailureSteps finished (status: $onFailureStatus).", + $null, + @{ + Status = $onFailureStatus + StepCount = @($planOnFailureSteps).Count + } + ) } # RunCompleted should always be the last event for deterministic event order. - $context.EventSink.WriteEvent('RunCompleted', "Plan execution finished (status: $runStatus).", $null, @{ - Status = $runStatus - StepCount = @($Plan.Steps).Count - }) + $context.EventSink.WriteEvent( + 'RunCompleted', + "Plan execution finished (status: $runStatus).", + $null, + @{ + Status = $runStatus + StepCount = @($Plan.Steps).Count + } + ) # Issue #48: # Redact provider configuration/state at the output boundary (execution result). diff --git a/tools/Generate-IdleCmdletReference.ps1 b/tools/Generate-IdleCmdletReference.ps1 index b079d97a..935e9799 100644 --- a/tools/Generate-IdleCmdletReference.ps1 +++ b/tools/Generate-IdleCmdletReference.ps1 @@ -117,8 +117,7 @@ function Get-IdleCmdletMetadata { [string[]] $Exclude = @() ) - $cmds = - Get-Command -Module $ModuleName -CommandType Function, Cmdlet -ErrorAction Stop | + $cmds = Get-Command -Module $ModuleName -CommandType Function, Cmdlet -ErrorAction Stop | Where-Object { $_.Name -and $_.Name -notin $Exclude } | Sort-Object -Property Name -Unique diff --git a/tools/Generate-IdleStepReference.ps1 b/tools/Generate-IdleStepReference.ps1 index 61a97f9d..2d41e7bf 100644 --- a/tools/Generate-IdleStepReference.ps1 +++ b/tools/Generate-IdleStepReference.ps1 @@ -295,14 +295,12 @@ foreach ($m in $StepModules) { } # Discover step commands from the configured step modules. -$stepCommands = - foreach ($m in $StepModules) { - Get-Command -Module $m -CommandType Function -ErrorAction SilentlyContinue | - Where-Object { $_.Name -like 'Invoke-IdleStep*' } - } +$stepCommands = foreach ($m in $StepModules) { + Get-Command -Module $m -CommandType Function -ErrorAction SilentlyContinue | + Where-Object { $_.Name -like 'Invoke-IdleStep*' } +} -$stepCommands = - $stepCommands | +$stepCommands = $stepCommands | Where-Object { $_.Name -and $_.Name -notin $ExcludeCommands } | Sort-Object -Property Name -Unique diff --git a/tools/Set-IdleModuleVersion.ps1 b/tools/Set-IdleModuleVersion.ps1 index 9ee4a236..4f71aafc 100644 --- a/tools/Set-IdleModuleVersion.ps1 +++ b/tools/Set-IdleModuleVersion.ps1 @@ -99,9 +99,7 @@ function Get-ManifestModuleInfo { $content = Get-Content -Path $ManifestPath -Raw - $moduleVersion = - if ($content -match "(?m)^\s*ModuleVersion\s*=\s*'([^']+)'") { $Matches[1] } - else { $null } + $moduleVersion = if ($content -match "(?m)^\s*ModuleVersion\s*=\s*'([^']+)'") { $Matches[1] } else { $null } $moduleName = Split-Path -Path (Split-Path -Path $ManifestPath -Parent) -Leaf From 158ac0ebbe8bf7dcbc5db34716a863bda8e085ef Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:49:40 +0100 Subject: [PATCH 06/11] docs: fixed steps reference --- docs/reference/steps.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/reference/steps.md b/docs/reference/steps.md index f19961cf..b8d0d8b3 100644 --- a/docs/reference/steps.md +++ b/docs/reference/steps.md @@ -11,8 +11,8 @@ This page documents built-in IdLE steps discovered from `Invoke-IdleStep*` funct - **Step Name**: $stepType - **Implementation**: $commandName -- **Idempotent**: $idempotent -- **Contracts**: $contracts +- **Idempotent**: `Unknown` +- **Contracts**: `Unknown` - **Events**: Unknown **Synopsis** @@ -35,8 +35,8 @@ _Unknown (not detected automatically). Document required With.* keys in the step - **Step Name**: $stepType - **Implementation**: $commandName -- **Idempotent**: $idempotent -- **Contracts**: $contracts +- **Idempotent**: `Yes` +- **Contracts**: `Provider must implement method: $providerMethod` - **Events**: Unknown **Synopsis** @@ -66,8 +66,8 @@ The step is idempotent by design: it converges state to the desired value. - **Step Name**: $stepType - **Implementation**: $commandName -- **Idempotent**: $idempotent -- **Contracts**: $contracts +- **Idempotent**: `Yes` +- **Contracts**: `Unknown` - **Events**: Unknown **Synopsis** From de35d4b6ca8ba6745b65c2e12dd484d4f5378c37 Mon Sep 17 00:00:00 2001 From: Matthias <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:52:02 +0100 Subject: [PATCH 07/11] tools: fix variable formatting Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- tools/Generate-IdleStepReference.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/Generate-IdleStepReference.ps1 b/tools/Generate-IdleStepReference.ps1 index 2d41e7bf..9effe500 100644 --- a/tools/Generate-IdleStepReference.ps1 +++ b/tools/Generate-IdleStepReference.ps1 @@ -207,8 +207,8 @@ function ConvertTo-IdleStepMarkdownSection { [void]$sb.AppendLine("## $stepType") [void]$sb.AppendLine() - [void]$sb.AppendLine(("- **Step Name**: `$stepType")) - [void]$sb.AppendLine(("- **Implementation**: `$commandName")) + [void]$sb.AppendLine(("- **Step Name**: ``{0}``" -f $stepType)) + [void]$sb.AppendLine(("- **Implementation**: ``{0}``" -f $commandName)) [void]$sb.AppendLine(("- **Idempotent**: ``{0}``" -f $idempotent)) [void]$sb.AppendLine(("- **Contracts**: ``{0}``" -f $contracts)) [void]$sb.AppendLine(("- **Events**: Unknown")) From 02f36beb9069b5aab3560e9a70bd175c4d792272 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:52:53 +0100 Subject: [PATCH 08/11] docs: fixed step reference --- docs/reference/steps.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/reference/steps.md b/docs/reference/steps.md index b8d0d8b3..b40079c6 100644 --- a/docs/reference/steps.md +++ b/docs/reference/steps.md @@ -9,8 +9,8 @@ This page documents built-in IdLE steps discovered from `Invoke-IdleStep*` funct ## EmitEvent -- **Step Name**: $stepType -- **Implementation**: $commandName +- **Step Name**: `EmitEvent` +- **Implementation**: `Invoke-IdleStepEmitEvent` - **Idempotent**: `Unknown` - **Contracts**: `Unknown` - **Events**: Unknown @@ -33,8 +33,8 @@ _Unknown (not detected automatically). Document required With.* keys in the step ## EnsureAttribute -- **Step Name**: $stepType -- **Implementation**: $commandName +- **Step Name**: `EnsureAttribute` +- **Implementation**: `Invoke-IdleStepEnsureAttribute` - **Idempotent**: `Yes` - **Contracts**: `Provider must implement method: $providerMethod` - **Events**: Unknown @@ -64,8 +64,8 @@ The step is idempotent by design: it converges state to the desired value. ## EnsureEntitlement -- **Step Name**: $stepType -- **Implementation**: $commandName +- **Step Name**: `EnsureEntitlement` +- **Implementation**: `Invoke-IdleStepEnsureEntitlement` - **Idempotent**: `Yes` - **Contracts**: `Unknown` - **Events**: Unknown @@ -79,6 +79,7 @@ Ensures that an entitlement assignment is present or absent for an identity. This provider-agnostic step uses entitlement provider contracts to converge an assignment to the desired state. The host must supply a provider instance via `Context.Providers[]` that implements: + - ListEntitlements(identityKey) - GrantEntitlement(identityKey, entitlement) - RevokeEntitlement(identityKey, entitlement) From a917f3973db998fb0f200e1c115b896994013da0 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:55:17 +0100 Subject: [PATCH 09/11] docs: fixing function synopsis to avoid md linting error in generated steps docu --- .../Public/Invoke-IdleStepEnsureEntitlement.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/IdLE.Steps.Common/Public/Invoke-IdleStepEnsureEntitlement.ps1 b/src/IdLE.Steps.Common/Public/Invoke-IdleStepEnsureEntitlement.ps1 index cc51c7ad..39a2a9a5 100644 --- a/src/IdLE.Steps.Common/Public/Invoke-IdleStepEnsureEntitlement.ps1 +++ b/src/IdLE.Steps.Common/Public/Invoke-IdleStepEnsureEntitlement.ps1 @@ -7,6 +7,7 @@ function Invoke-IdleStepEnsureEntitlement { This provider-agnostic step uses entitlement provider contracts to converge an assignment to the desired state. The host must supply a provider instance via `Context.Providers[]` that implements: + - ListEntitlements(identityKey) - GrantEntitlement(identityKey, entitlement) - RevokeEntitlement(identityKey, entitlement) From f5b2fc5892f6a7d4a15b48faec4376c85a2adca5 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 02:00:49 +0100 Subject: [PATCH 10/11] docs: fixed interpolation of variables from synapsis for contract variables --- tools/Generate-IdleStepReference.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/Generate-IdleStepReference.ps1 b/tools/Generate-IdleStepReference.ps1 index 9effe500..f09e57dd 100644 --- a/tools/Generate-IdleStepReference.ps1 +++ b/tools/Generate-IdleStepReference.ps1 @@ -201,7 +201,7 @@ function ConvertTo-IdleStepMarkdownSection { } $providerMethod = Get-IdleProviderMethodHintFromDescription -DescriptionText $description - $contracts = if ($providerMethod) { "Provider must implement method: `$providerMethod" } else { 'Unknown' } + $contracts = if ($providerMethod) { "Provider must implement method: $providerMethod" } else { 'Unknown' } $sb = New-Object System.Text.StringBuilder From cbd27a7f47b88a143ff98b093f4912f56f608e3a Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 17 Jan 2026 02:00:59 +0100 Subject: [PATCH 11/11] docs: update steps reference --- docs/reference/steps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/steps.md b/docs/reference/steps.md index b40079c6..cb287dba 100644 --- a/docs/reference/steps.md +++ b/docs/reference/steps.md @@ -36,7 +36,7 @@ _Unknown (not detected automatically). Document required With.* keys in the step - **Step Name**: `EnsureAttribute` - **Implementation**: `Invoke-IdleStepEnsureAttribute` - **Idempotent**: `Yes` -- **Contracts**: `Provider must implement method: $providerMethod` +- **Contracts**: `Provider must implement method: EnsureAttribute` - **Events**: Unknown **Synopsis**