Summary
We want to strictly enforce the architectural rule:
Steps → StepTypes → RequiredCapabilities ← Providers
Steps must be fully provider-agnostic:
- no product/provider-specific naming in step packs
- no product-specific defaults inside steps (e.g., AuthSessionName)
- steps only call provider contract methods via the provider abstraction (no direct cmdlets, no imports, no remote/network at step scope)
A repository review shows one primary violation of this strictness:
- The
TriggerDirectorySync step implementation is provider-agnostic in code, but the step pack and documentation are Entra Connect-specific:
- Module name:
IdLE.Steps.DirectorySync.EntraConnect
- Help/defaults mention “Entra Connect”
- Default
AuthSessionName is EntraConnect
This issue refactors the DirectorySync step pack to be generic and updates all references accordingly.
Motivation / Rationale
- Keep Steps reusable across providers that implement the same capability set.
- Avoid baking provider/product identity into Step packs or defaults.
- Ensure adding a second provider for the same StepType requires no changes to Steps (only provider implementation + capability declaration).
- Make documentation consistent with the capability model.
Scope
In scope
- Refactor the DirectorySync step pack and
TriggerDirectorySync step to be strictly generic.
- Update step registry auto-discovery to map StepType → handler for the new generic module.
- Update docs/tests/examples that reference the old module name and Entra Connect wording.
Out of scope
- Capability taxonomy redesign (already uses generic
IdLE.DirectorySync.*).
- Provider-side functionality changes (except renames required by the refactor).
- Broader module packaging decisions (tracked separately).
Current findings (what violates strict generic Steps)
1) Provider-specific step pack naming
src/IdLE.Steps.DirectorySync.EntraConnect/* is provider/product-specific by name.
2) Provider-specific wording and defaults inside the step
Invoke-IdleStepTriggerDirectorySync:
- Help/description mentions “Entra Connect directory sync cycle”.
- Defaults include:
Name = 'Trigger Entra Connect sync'
AuthSessionName = 'EntraConnect'
3) Documentation inherits provider specificity
docs/reference/steps.md describes TriggerDirectorySync as “Triggers an Entra Connect directory sync cycle …”.
Target state (definition)
Step pack & step implementation
- A generic step pack exists:
- Module name:
IdLE.Steps.DirectorySync
- The step remains provider-agnostic and references only capabilities/contract methods:
- StepType:
IdLE.Step.TriggerDirectorySync
- RequiredCapabilities:
IdLE.DirectorySync.Trigger, IdLE.DirectorySync.Status
- Provider contract methods (example):
StartSyncCycle(PolicyType, AuthSession)
GetSyncCycleState(AuthSession)
- No provider-specific defaults:
- Default
AuthSessionName should be generic (e.g., DirectorySync) or omitted (null) so workflows/templates set it explicitly.
- Default
Name should be provider-neutral (e.g., “Trigger directory sync”).
Templates remain provider-specific (allowed)
- Provider-specific workflows (e.g., Entra Connect) can live in templates and specify:
- provider alias (e.g.,
DirectorySync)
- auth session name/options (e.g.,
EntraConnect)
- provider module to import
This provider specificity must not leak into Step packs.
Acceptance criteria
Strict provider-agnostic steps
Engine discovery / StepRegistry
Tests
Documentation
Compatibility
Implementation tasks (agent-ready)
1) Create generic DirectorySync step pack
2) Refactor Invoke-IdleStepTriggerDirectorySync
3) Update StepRegistry auto-registration
4) Update tests
5) Update docs
6) Update examples/templates (if referenced)
Suggested labels
refactor
steps
documentation
testing
- (optional)
breaking change
Notes / Dependencies
- This issue is compatible with the “non-blocking baseline NestedModules” policy; it does not require changing what IdLE loads by default.
- If a separate issue introduces “packs”,
IdLE.Steps.DirectorySync can be used by multiple providers (Entra Connect today, others later).
Summary
We want to strictly enforce the architectural rule:
Steps → StepTypes → RequiredCapabilities ← Providers
Steps must be fully provider-agnostic:
A repository review shows one primary violation of this strictness:
TriggerDirectorySyncstep implementation is provider-agnostic in code, but the step pack and documentation are Entra Connect-specific:IdLE.Steps.DirectorySync.EntraConnectAuthSessionNameisEntraConnectThis issue refactors the DirectorySync step pack to be generic and updates all references accordingly.
Motivation / Rationale
Scope
In scope
TriggerDirectorySyncstep to be strictly generic.Out of scope
IdLE.DirectorySync.*).Current findings (what violates strict generic Steps)
1) Provider-specific step pack naming
src/IdLE.Steps.DirectorySync.EntraConnect/*is provider/product-specific by name.2) Provider-specific wording and defaults inside the step
Invoke-IdleStepTriggerDirectorySync:Name = 'Trigger Entra Connect sync'AuthSessionName = 'EntraConnect'3) Documentation inherits provider specificity
docs/reference/steps.mddescribesTriggerDirectorySyncas “Triggers an Entra Connect directory sync cycle …”.Target state (definition)
Step pack & step implementation
IdLE.Steps.DirectorySyncIdLE.Step.TriggerDirectorySyncIdLE.DirectorySync.Trigger,IdLE.DirectorySync.StatusStartSyncCycle(PolicyType, AuthSession)GetSyncCycleState(AuthSession)AuthSessionNameshould be generic (e.g.,DirectorySync) or omitted (null) so workflows/templates set it explicitly.Nameshould be provider-neutral (e.g., “Trigger directory sync”).Templates remain provider-specific (allowed)
DirectorySync)EntraConnect)This provider specificity must not leak into Step packs.
Acceptance criteria
Strict provider-agnostic steps
IdLE.Steps.DirectorySynccontainsInvoke-IdleStepTriggerDirectorySync(same StepType, generic wording).Engine discovery / StepRegistry
Get-IdleStepRegistryauto-registersIdLE.Step.TriggerDirectorySyncwhenIdLE.Steps.DirectorySyncis loaded:IdLE.Steps.Common).Tests
Invoke-IdleStepTriggerDirectorySync.Tests.ps1referencesIdLE.Steps.DirectorySync(not EntraConnect).Documentation
docs/reference/steps.mdupdatesTriggerDirectorySyncdescription to provider-neutral wording.IdLE.Steps.DirectorySync.EntraConnectare removed or replaced with:Compatibility
Implementation tasks (agent-ready)
1) Create generic DirectorySync step pack
src/IdLE.Steps.DirectorySync/as a new module:IdLE.Steps.DirectorySync.psd1IdLE.Steps.DirectorySync.psm1Public/Invoke-IdleStepTriggerDirectorySync.ps1(moved)src/IdLE.Steps.DirectorySync.EntraConnect/:2) Refactor
Invoke-IdleStepTriggerDirectorySyncName = 'Trigger directory sync'AuthSessionName:DirectorySync)Invoke-IdleProviderMethod) and does not add any external dependencies.3) Update StepRegistry auto-registration
src/IdLE.Core/Private/Get-IdleStepRegistry.ps1:IdLE.Step.TriggerDirectorySyncusing:CommandName = 'Invoke-IdleStepTriggerDirectorySync'ModuleName = 'IdLE.Steps.DirectorySync'4) Update tests
tests/Invoke-IdleStepTriggerDirectorySync.Tests.ps1:IdLE.Steps.DirectorySync5) Update docs
docs/reference/steps.mdsection TriggerDirectorySync to provider-neutral text.6) Update examples/templates (if referenced)
IdLE.Steps.DirectorySync.EntraConnect, update toIdLE.Steps.DirectorySync.Suggested labels
refactorstepsdocumentationtestingbreaking changeNotes / Dependencies
IdLE.Steps.DirectorySynccan be used by multiple providers (Entra Connect today, others later).