diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 858eab7b..b9a9fc6d 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -12,7 +12,7 @@ When executing terminal commands (using `run_in_terminal` or similar tools):
## Other instructions
-| Tech | Instruction file |
-|------|------------------|
+| Tech | Instruction file |
+|------------|-------------------------------------------------------------|
| PowerShell | [pwsh.instructions.md](./instructions/pwsh.instructions.md) |
-| Markdown | [md.instructions.md](./instructions/md.instructions.md) |
+| Markdown | [md.instructions.md](./instructions/md.instructions.md) |
diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml
index b9ecdfa9..bb432af1 100644
--- a/.github/linters/.markdown-lint.yml
+++ b/.github/linters/.markdown-lint.yml
@@ -18,6 +18,8 @@ MD026:
MD029: false # Ordered list item prefix
MD033: false # Allow inline HTML
MD036: false # Emphasis used instead of a heading
+MD060:
+ style: "leading" # Table column style (leading avoids emoji width issues)
#################
# Rules by tags #
diff --git a/.github/prompts/constitution.prompt.md b/.github/prompts/constitution.prompt.md
index 4a78dfe6..454a3a03 100644
--- a/.github/prompts/constitution.prompt.md
+++ b/.github/prompts/constitution.prompt.md
@@ -29,9 +29,9 @@ Two operating modes:
Replacement Analysis Table (when overlap detected):
-| Existing Item | Proposed New / Change | Overlap Basis | Suggested Action |
-|---------------|-----------------------|---------------|------------------|
-|
| | e.g. semantic similarity, scope duplication | Replace / Merge / Keep Both |
+| Existing Item | Proposed New / Change | Overlap Basis | Suggested Action |
+|---------------------|---------------------------|----------------------------------------------|----------------------------|
+| | | e.g. semantic similarity, scope duplication | Replace / Merge / Keep Both |
Heuristics for overlap:
- Title similarity score (case-insensitive) >= 0.6 (rough string similarity) OR
diff --git a/.github/prompts/plan.prompt.md b/.github/prompts/plan.prompt.md
index 5fda97f5..26959b24 100644
--- a/.github/prompts/plan.prompt.md
+++ b/.github/prompts/plan.prompt.md
@@ -102,14 +102,14 @@ Given the implementation details provided as an argument, do this:
- **Use the same title for the PR**: The PR title must match the issue title exactly
- If unable to retrieve the issue title, determine the PR type and icon based on the changes:
- | Type of change | Icon | Label |
- |-|-|-|
- | Docs | π | Docs |
- | Fix | πͺ² | Fix, Patch |
- | Security fix | β οΈ | Fix |
- | Patch | π©Ή | Patch |
- | Feature | π | Minor |
- | Breaking change | π | Major |
+ | Type of change | Icon | Label |
+ | --------------- | ---- | ---------- |
+ | Docs | π | Docs |
+ | Fix | πͺ² | Fix, Patch |
+ | Security fix | β οΈ | Fix |
+ | Patch | π©Ή | Patch |
+ | Feature | π | Minor |
+ | Breaking change | π | Major |
- Fallback PR title format (if issue title unavailable): ` [Type of change]: `
- Create PR description:
diff --git a/.github/prompts/pr.prompt.md b/.github/prompts/pr.prompt.md
index 8baabc88..75661c9a 100644
--- a/.github/prompts/pr.prompt.md
+++ b/.github/prompts/pr.prompt.md
@@ -14,13 +14,13 @@ $ARGUMENTS
## Supported Change Types
-| Type | Icon | Labels | Description |
-|------|------|--------|-------------|
-| Major | π | `Major` | Breaking changes that affect compatibility |
-| Minor | π | `Minor` | New features or enhancements |
-| Patch | π©Ή | `Patch` | Small fixes or improvements |
-| Fix | πͺ² | `Fix`, `Patch` | Bugfixes |
-| Docs | π | `Docs` | Documentation changes only |
+| Type | Icon | Labels | Description |
+| ----- | ---- | -------------- | ------------------------------------------ |
+| Major | π | `Major` | Breaking changes that affect compatibility |
+| Minor | π | `Minor` | New features or enhancements |
+| Patch | π©Ή | `Patch` | Small fixes or improvements |
+| Fix | πͺ² | `Fix`, `Patch` | Bugfixes |
+| Docs | π | `Docs` | Documentation changes only |
## Execution Steps
diff --git a/.github/workflows/Auto-Release.yml b/.github/workflows/Auto-Release.yml
index 50a5a410..60a51ed9 100644
--- a/.github/workflows/Auto-Release.yml
+++ b/.github/workflows/Auto-Release.yml
@@ -26,9 +26,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- name: Auto-Release
- uses: PSModule/Auto-Release@v1
+ uses: PSModule/Auto-Release@eabd533035e2cb9822160f26f2eda584bd012356 # v1.9.5
with:
IncrementalPrerelease: false
diff --git a/.github/workflows/Build-Docs.yml b/.github/workflows/Build-Docs.yml
index a8d9ceb8..08e28cd4 100644
--- a/.github/workflows/Build-Docs.yml
+++ b/.github/workflows/Build-Docs.yml
@@ -48,25 +48,25 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Download module artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: module
path: ${{ inputs.WorkingDirectory }}/outputs/module
- name: Document module
- uses: PSModule/Document-PSModule@v1
+ uses: PSModule/Document-PSModule@15dc407c99e408fc0a4023d4f16aee2a5507ba74 # v1.0.12
with:
Name: ${{ inputs.Name }}
WorkingDirectory: ${{ inputs.WorkingDirectory }}
- name: Upload docs artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
with:
name: docs
path: ${{ inputs.WorkingDirectory }}/outputs/docs
@@ -74,7 +74,7 @@ jobs:
retention-days: 1
- name: Commit all changes
- uses: PSModule/GitHub-Script@v1
+ uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4
with:
Debug: ${{ inputs.Debug }}
Prerelease: ${{ inputs.Prerelease }}
@@ -102,7 +102,7 @@ jobs:
- name: Lint documentation
id: super-linter
- uses: super-linter/super-linter/slim@7bba2eeb89d01dc9bfd93c497477a57e72c83240 # v8.2.0
+ uses: super-linter/super-linter/slim@502f4fe48a81a392756e173e39a861f8c8efe056 # v8.3.0
env:
RUN_LOCAL: true
DEFAULT_BRANCH: main
diff --git a/.github/workflows/Build-Module.yml b/.github/workflows/Build-Module.yml
index 328c4d56..71049df6 100644
--- a/.github/workflows/Build-Module.yml
+++ b/.github/workflows/Build-Module.yml
@@ -29,13 +29,13 @@ jobs:
GH_TOKEN: ${{ github.token }}
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Build module
- uses: PSModule/Build-PSModule@v4
+ uses: PSModule/Build-PSModule@fe8cc14a7192066cc46cb9514659772ebde05849 # v4.0.9
with:
Name: ${{ inputs.Name }}
ArtifactName: ${{ inputs.ArtifactName }}
diff --git a/.github/workflows/Build-Site.yml b/.github/workflows/Build-Site.yml
index b13face7..53ec0e8a 100644
--- a/.github/workflows/Build-Site.yml
+++ b/.github/workflows/Build-Site.yml
@@ -42,16 +42,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Install-PSModuleHelpers
- uses: PSModule/Install-PSModuleHelpers@v1
+ uses: PSModule/Install-PSModuleHelpers@d60d63e4be477d1ca0c67c6085101fb109bce8f1 # v1.0.6
- name: Download docs artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: docs
path: ${{ inputs.WorkingDirectory }}/outputs/docs
@@ -65,7 +65,7 @@ jobs:
pip install mkdocs-git-committers-plugin-2
- name: Structure site
- uses: PSModule/GitHub-Script@v1
+ uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4
with:
Debug: ${{ inputs.Debug }}
Prerelease: ${{ inputs.Prerelease }}
@@ -173,7 +173,7 @@ jobs:
mkdocs build --config-file mkdocs.yml --site-dir ../../_site
}
- - uses: actions/upload-pages-artifact@v4
+ - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
with:
name: github-pages
path: ${{ inputs.WorkingDirectory }}/_site
diff --git a/.github/workflows/Get-CodeCoverage.yml b/.github/workflows/Get-CodeCoverage.yml
index e82496c6..26c7f2c6 100644
--- a/.github/workflows/Get-CodeCoverage.yml
+++ b/.github/workflows/Get-CodeCoverage.yml
@@ -48,7 +48,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Get-CodeCoverage
- uses: PSModule/Get-PesterCodeCoverage@v1
+ uses: PSModule/Get-PesterCodeCoverage@a7923eefbf55b452f9b1534c5b50ca9bd192f810 # v1.0.3
id: Get-CodeCoverage
with:
CodeCoveragePercentTarget: ${{ inputs.CodeCoveragePercentTarget }}
diff --git a/.github/workflows/Get-Settings.yml b/.github/workflows/Get-Settings.yml
index 62a6e5b5..d4cf4e85 100644
--- a/.github/workflows/Get-Settings.yml
+++ b/.github/workflows/Get-Settings.yml
@@ -65,13 +65,13 @@ jobs:
ModuleTestSuites: ${{ fromJson(steps.Get-Settings.outputs.result).ModuleTestSuites }}
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Get-Settings
- uses: PSModule/GitHub-Script@v1
+ uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4
id: Get-Settings
env:
PSMODULE_GET_SETTINGS_INPUT_Name: ${{ inputs.Name }}
diff --git a/.github/workflows/Get-TestResults.yml b/.github/workflows/Get-TestResults.yml
index aa6148ad..52fc82b5 100644
--- a/.github/workflows/Get-TestResults.yml
+++ b/.github/workflows/Get-TestResults.yml
@@ -50,7 +50,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Get-TestResults
- uses: PSModule/Get-PesterTestResults@v1
+ uses: PSModule/Get-PesterTestResults@0c1d8cde9575b192831f76e87d3f7e825a7d8ff4 # v1.0.7
id: Get-TestResults
with:
SourceCodeTestSuites: ${{ inputs.SourceCodeTestSuites }}
diff --git a/.github/workflows/Lint-SourceCode.yml b/.github/workflows/Lint-SourceCode.yml
index 627dfc08..7753995b 100644
--- a/.github/workflows/Lint-SourceCode.yml
+++ b/.github/workflows/Lint-SourceCode.yml
@@ -50,12 +50,12 @@ jobs:
runs-on: ${{ inputs.RunsOn }}
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
- name: Lint-SourceCode
- uses: PSModule/Invoke-ScriptAnalyzer@v4
+ uses: PSModule/Invoke-ScriptAnalyzer@0b13023a981f4c94136bba6193a9abd2d936cbc1 # v4.1.1
with:
Debug: ${{ inputs.Debug }}
Prerelease: ${{ inputs.Prerelease }}
diff --git a/.github/workflows/Linter.yml b/.github/workflows/Linter.yml
index 22d68469..8d3dbfb9 100644
--- a/.github/workflows/Linter.yml
+++ b/.github/workflows/Linter.yml
@@ -19,13 +19,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Lint code base
- uses: super-linter/super-linter@7bba2eeb89d01dc9bfd93c497477a57e72c83240 # v8.2.0
+ uses: super-linter/super-linter@502f4fe48a81a392756e173e39a861f8c8efe056 # v8.3.0
env:
GITHUB_TOKEN: ${{ github.token }}
VALIDATE_BIOME_FORMAT: false
diff --git a/.github/workflows/Test-Module.yml b/.github/workflows/Test-Module.yml
index e6d757d7..77644516 100644
--- a/.github/workflows/Test-Module.yml
+++ b/.github/workflows/Test-Module.yml
@@ -81,18 +81,18 @@ jobs:
runs-on: ${{ inputs.RunsOn }}
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
- name: Download module artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: module
path: ${{ inputs.WorkingDirectory }}/outputs/module
- name: Test-Module
- uses: PSModule/Test-PSModule@v3
+ uses: PSModule/Test-PSModule@7d94ed751a60973867e84ea8d44521e94b7c485d # v3.0.7
with:
Name: ${{ inputs.Name }}
Debug: ${{ inputs.Debug }}
@@ -107,18 +107,18 @@ jobs:
runs-on: ${{ inputs.RunsOn }}
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
- name: Download module artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: module
path: ${{ inputs.WorkingDirectory }}/outputs/module
- name: Lint-Module
- uses: PSModule/Invoke-ScriptAnalyzer@v4
+ uses: PSModule/Invoke-ScriptAnalyzer@0b13023a981f4c94136bba6193a9abd2d936cbc1 # v4.1.1
with:
Path: outputs/module
Debug: ${{ inputs.Debug }}
diff --git a/.github/workflows/Test-ModuleLocal.yml b/.github/workflows/Test-ModuleLocal.yml
index 68f4e3f2..fa4dde48 100644
--- a/.github/workflows/Test-ModuleLocal.yml
+++ b/.github/workflows/Test-ModuleLocal.yml
@@ -92,19 +92,19 @@ jobs:
runs-on: ${{ inputs.RunsOn }}
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Download module artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: module
path: ${{ inputs.WorkingDirectory }}/outputs/module
- name: Install-PSModuleHelpers
- uses: PSModule/Install-PSModuleHelpers@v1
+ uses: PSModule/Install-PSModuleHelpers@d60d63e4be477d1ca0c67c6085101fb109bce8f1 # v1.0.6
- name: Import-Module
id: import-module
@@ -118,7 +118,7 @@ jobs:
"path=$path" >> $env:GITHUB_OUTPUT
- name: Test-ModuleLocal
- uses: PSModule/Invoke-Pester@v4
+ uses: PSModule/Invoke-Pester@882994cbe1ff07c3fc8afdac52404c940f99b331 # v4.2.2
with:
Debug: ${{ inputs.Debug }}
Prerelease: ${{ inputs.Prerelease }}
diff --git a/.github/workflows/Test-SourceCode.yml b/.github/workflows/Test-SourceCode.yml
index 3d36e736..b9001ad9 100644
--- a/.github/workflows/Test-SourceCode.yml
+++ b/.github/workflows/Test-SourceCode.yml
@@ -50,13 +50,13 @@ jobs:
runs-on: ${{ inputs.RunsOn }}
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Test-SourceCode
- uses: PSModule/Test-PSModule@v3
+ uses: PSModule/Test-PSModule@7d94ed751a60973867e84ea8d44521e94b7c485d # v3.0.7
with:
Debug: ${{ inputs.Debug }}
Prerelease: ${{ inputs.Prerelease }}
diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml
index 85d441e8..f5c0ece6 100644
--- a/.github/workflows/workflow.yml
+++ b/.github/workflows/workflow.yml
@@ -104,7 +104,7 @@ jobs:
- Get-Settings
steps:
- name: Checkout repo
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
@@ -133,7 +133,7 @@ jobs:
- name: Lint code base
id: super-linter
- uses: super-linter/super-linter@7bba2eeb89d01dc9bfd93c497477a57e72c83240 # v8.2.0
+ uses: super-linter/super-linter@502f4fe48a81a392756e173e39a861f8c8efe056 # v8.3.0
env:
GITHUB_TOKEN: ${{ github.token }}
DEFAULT_WORKSPACE: ${{ inputs.WorkingDirectory }}
@@ -295,13 +295,13 @@ jobs:
- Get-Settings
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Run BeforeAll Setup Scripts
- uses: PSModule/GitHub-Script@v1
+ uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4
with:
Name: BeforeAll-ModuleLocal
ShowInfo: false
@@ -372,14 +372,14 @@ jobs:
- Test-ModuleLocal
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Run AfterAll Teardown Scripts
if: always()
- uses: PSModule/GitHub-Script@v1
+ uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4
with:
Name: AfterAll-ModuleLocal
ShowInfo: false
@@ -473,11 +473,11 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- - uses: actions/configure-pages@v5
+ - uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
- name: Deploy to GitHub Pages
id: deployment
- uses: actions/deploy-pages@v4
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
# Runs on:
# - β
Open/Updated PR - Publishes prerelease when all tests/coverage/build succeed
@@ -499,13 +499,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
- uses: actions/checkout@v5
+ uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
fetch-depth: 0
- name: Download module artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: module
path: ${{ inputs.WorkingDirectory }}/outputs/module
@@ -516,7 +516,7 @@ jobs:
Install-PSResource -Name Microsoft.PowerShell.PSResourceGet -Repository PSGallery -TrustRepository
- name: Publish module
- uses: PSModule/Publish-PSModule@v2
+ uses: PSModule/Publish-PSModule@6c25d139fe51b890f75c057897bd58ac344b192a # v2.0.8
env:
GH_TOKEN: ${{ github.token }}
with:
diff --git a/.specify/memory/constitution.md b/.specify/memory/constitution.md
index 4bc59ab8..5b52fc91 100644
--- a/.specify/memory/constitution.md
+++ b/.specify/memory/constitution.md
@@ -495,21 +495,21 @@ The Process-PSModule workflow uses **dynamic conditions** to determine job execu
### Publishing Behavior Examples
-| PR State | Labels | Build/Test | Publish-Module | Publish-Site | Version |
-|----------|--------|------------|----------------|--------------|---------|
-| Opened | `minor` | β
Yes | β No | β No | N/A (not published) |
-| Opened | `prerelease` | β
Yes | β
Yes (prerelease) | β No | `1.3.0-branchname001` |
-| Opened | `prerelease`, `minor` | β
Yes | β
Yes (prerelease) | β No | `1.3.0-branchname001` |
-| Synchronized | `major` | β
Yes | β No | β No | N/A (not published) |
-| Synchronized | `prerelease` | β
Yes | β
Yes (prerelease) | β No | `1.3.0-branchname002` |
-| Merged | `minor` | β
Yes | β
Yes (normal) | β
Yes | `1.3.0` |
-| Merged | `major` | β
Yes | β
Yes (normal) | β
Yes | `2.0.0` |
-| Merged | `patch` | β
Yes | β
Yes (normal) | β
Yes | `1.2.4` |
-| Merged | (no label) | β
Yes | β
Yes (if AutoPatching) | β
Yes | `1.2.4` (patch) |
-| Merged | `NoRelease` | β
Yes | β No | β No | N/A (skipped) |
-| Merged | `prerelease`, `minor` | β
Yes | β
Yes (normal) | β
Yes | `1.3.0` (prerelease ignored) |
-| Scheduled (cron) | N/A | β
Yes | β No | β No | N/A (validation only) |
-| Manual (workflow_dispatch) | N/A | β
Yes | β No | β No | N/A (validation only) |
+| PR State | Labels | Build/Test | Publish-Module | Publish-Site | Version |
+| -------------------------- | --------------------- | ---------- | ------------------------ | ------------ | ---------------------------- |
+| Opened | `minor` | β
Yes | β No | β No | N/A (not published) |
+| Opened | `prerelease` | β
Yes | β
Yes (prerelease) | β No | `1.3.0-branchname001` |
+| Opened | `prerelease`, `minor` | β
Yes | β
Yes (prerelease) | β No | `1.3.0-branchname001` |
+| Synchronized | `major` | β
Yes | β No | β No | N/A (not published) |
+| Synchronized | `prerelease` | β
Yes | β
Yes (prerelease) | β No | `1.3.0-branchname002` |
+| Merged | `minor` | β
Yes | β
Yes (normal) | β
Yes | `1.3.0` |
+| Merged | `major` | β
Yes | β
Yes (normal) | β
Yes | `2.0.0` |
+| Merged | `patch` | β
Yes | β
Yes (normal) | β
Yes | `1.2.4` |
+| Merged | (no label) | β
Yes | β
Yes (if AutoPatching) | β
Yes | `1.2.4` (patch) |
+| Merged | `NoRelease` | β
Yes | β No | β No | N/A (skipped) |
+| Merged | `prerelease`, `minor` | β
Yes | β
Yes (normal) | β
Yes | `1.3.0` (prerelease ignored) |
+| Scheduled (cron) | N/A | β
Yes | β No | β No | N/A (validation only) |
+| Manual (workflow_dispatch) | N/A | β
Yes | β No | β No | N/A (validation only) |
### Version Calculation Process
diff --git a/.specify/scripts/powershell/check-prerequisites.ps1 b/.specify/scripts/powershell/check-prerequisites.ps1
index 44a0e16a..9ac7a434 100644
--- a/.specify/scripts/powershell/check-prerequisites.ps1
+++ b/.specify/scripts/powershell/check-prerequisites.ps1
@@ -1,4 +1,4 @@
-#!/usr/bin/env pwsh
+ο»Ώ#!/usr/bin/env pwsh
# Consolidated prerequisite checking script (PowerShell)
#
diff --git a/.specify/scripts/powershell/common.ps1 b/.specify/scripts/powershell/common.ps1
index ca4cdbed..029bd9a7 100644
--- a/.specify/scripts/powershell/common.ps1
+++ b/.specify/scripts/powershell/common.ps1
@@ -1,4 +1,4 @@
-#!/usr/bin/env pwsh
+ο»Ώ#!/usr/bin/env pwsh
# Common PowerShell functions analogous to common.sh
function Get-RepoRoot {
diff --git a/.specify/scripts/powershell/create-new-feature.ps1 b/.specify/scripts/powershell/create-new-feature.ps1
index 7ab08058..c05032e3 100644
--- a/.specify/scripts/powershell/create-new-feature.ps1
+++ b/.specify/scripts/powershell/create-new-feature.ps1
@@ -1,4 +1,4 @@
-#!/usr/bin/env pwsh
+ο»Ώ#!/usr/bin/env pwsh
# Create a new feature
[CmdletBinding()]
param(
diff --git a/.specify/scripts/powershell/setup-plan.ps1 b/.specify/scripts/powershell/setup-plan.ps1
index c1020b67..5f2859b1 100644
--- a/.specify/scripts/powershell/setup-plan.ps1
+++ b/.specify/scripts/powershell/setup-plan.ps1
@@ -1,4 +1,4 @@
-#!/usr/bin/env pwsh
+ο»Ώ#!/usr/bin/env pwsh
# Setup implementation plan for a feature
[CmdletBinding()]
diff --git a/.specify/scripts/powershell/update-agent-context.ps1 b/.specify/scripts/powershell/update-agent-context.ps1
index d1d2a5c8..73a662c4 100644
--- a/.specify/scripts/powershell/update-agent-context.ps1
+++ b/.specify/scripts/powershell/update-agent-context.ps1
@@ -1,4 +1,4 @@
-#!/usr/bin/env pwsh
+ο»Ώ#!/usr/bin/env pwsh
<#!
.SYNOPSIS
Update agent context files with information from plan.md (PowerShell version)
diff --git a/.specify/templates/plan-template.md b/.specify/templates/plan-template.md
index 53ee1010..c1a663b8 100644
--- a/.specify/templates/plan-template.md
+++ b/.specify/templates/plan-template.md
@@ -35,17 +35,17 @@
## Technical Context
-| Aspect | Details |
-|--------|---------|
-| **Language/Version** | [e.g., Python 3.11, Swift 5.9, Rust 1.75 or NEEDS CLARIFICATION] |
-| **Primary Dependencies** | [e.g., FastAPI, UIKit, LLVM or NEEDS CLARIFICATION] |
-| **Storage** | [if applicable, e.g., PostgreSQL, CoreData, files or N/A] |
-| **Testing** | [e.g., pytest, XCTest, cargo test or NEEDS CLARIFICATION] |
-| **Target Platform** | [e.g., Linux server, iOS 15+, Wasm or NEEDS CLARIFICATION] |
-| **Project Type** | [single/web/mobile - determines source structure] |
-| **Performance Goals** | [domain-specific, e.g., 1000 req/s, 10k lines/sec, 60 fps or NEEDS CLARIFICATION] |
-| **Constraints** | [domain-specific, e.g., <200ms p95, <100MB memory, offline-capable or NEEDS CLARIFICATION] |
-| **Scale/Scope** | [domain-specific, e.g., 10k users, 1M LOC, 50 screens or NEEDS CLARIFICATION] |
+| Aspect | Details |
+| ------------------------ | ------------------------------------------------------------------------------------------ |
+| **Language/Version** | [e.g., Python 3.11, Swift 5.9, Rust 1.75 or NEEDS CLARIFICATION] |
+| **Primary Dependencies** | [e.g., FastAPI, UIKit, LLVM or NEEDS CLARIFICATION] |
+| **Storage** | [if applicable, e.g., PostgreSQL, CoreData, files or N/A] |
+| **Testing** | [e.g., pytest, XCTest, cargo test or NEEDS CLARIFICATION] |
+| **Target Platform** | [e.g., Linux server, iOS 15+, Wasm or NEEDS CLARIFICATION] |
+| **Project Type** | [single/web/mobile - determines source structure] |
+| **Performance Goals** | [domain-specific, e.g., 1000 req/s, 10k lines/sec, 60 fps or NEEDS CLARIFICATION] |
+| **Constraints** | [domain-specific, e.g., <200ms p95, <100MB memory, offline-capable or NEEDS CLARIFICATION] |
+| **Scale/Scope** | [domain-specific, e.g., 10k users, 1M LOC, 50 screens or NEEDS CLARIFICATION] |
## Constitution Check
@@ -243,10 +243,10 @@ directories captured above]
*Fill ONLY if Constitution Check has violations that must be justified*
-| Violation | Why Needed | Simpler Alternative Rejected Because |
-|-----------|------------|-------------------------------------|
-| [e.g., 4th project] | [current need] | [why 3 projects insufficient] |
-| [e.g., Repository pattern] | [specific problem] | [why direct DB access insufficient] |
+| Violation | Why Needed | Simpler Alternative Rejected Because |
+| -------------------------- | ------------------ | ------------------------------------ |
+| [e.g., 4th project] | [current need] | [why 3 projects insufficient] |
+| [e.g., Repository pattern] | [specific problem] | [why direct DB access insufficient] |
## Progress Tracking
diff --git a/.specify/templates/spec-template.md b/.specify/templates/spec-template.md
index 9e2de0cb..600e8d0b 100644
--- a/.specify/templates/spec-template.md
+++ b/.specify/templates/spec-template.md
@@ -20,53 +20,53 @@
### Functional Requirements
-| ID | Requirement |
-|----|-------------|
-| **FR-001** | System MUST [specific capability, e.g., "allow users to create accounts"] |
-| **FR-002** | System MUST [specific capability, e.g., "validate email addresses"] |
-| **FR-003** | Users MUST be able to [key interaction, e.g., "reset their password"] |
-| **FR-004** | System MUST [data requirement, e.g., "persist user preferences"] |
-| **FR-005** | System MUST [behavior, e.g., "log all security events"] |
+| ID | Requirement |
+| ---------- | ----------------------------------------------------------------------------------------------------------------- |
+| **FR-001** | System MUST [specific capability, e.g., "allow users to create accounts"] |
+| **FR-002** | System MUST [specific capability, e.g., "validate email addresses"] |
+| **FR-003** | Users MUST be able to [key interaction, e.g., "reset their password"] |
+| **FR-004** | System MUST [data requirement, e.g., "persist user preferences"] |
+| **FR-005** | System MUST [behavior, e.g., "log all security events"] |
| **FR-006** | System MUST authenticate users via [NEEDS CLARIFICATION: auth method not specified - email/password, SSO, OAuth?] |
-| **FR-007** | System MUST retain user data for [NEEDS CLARIFICATION: retention period not specified] |
+| **FR-007** | System MUST retain user data for [NEEDS CLARIFICATION: retention period not specified] |
### Non-Functional Requirements
-| ID | Requirement |
-|----|-------------|
-| **NFR-001** | System MUST respond within [specific time, e.g., "500ms for 95th percentile"] |
-| **NFR-002** | System MUST handle [specific load, e.g., "1000 concurrent users"] |
-| **NFR-003** | System MUST maintain [availability target, e.g., "99.9% uptime"] |
-| **NFR-004** | System MUST scale to [capacity limit, e.g., "10,000 transactions per second"] |
-| **NFR-005** | System MUST recover within [time period, e.g., "5 minutes after failure"] |
+| ID | Requirement |
+| ----------- | ------------------------------------------------------------------------------------------------------------ |
+| **NFR-001** | System MUST respond within [specific time, e.g., "500ms for 95th percentile"] |
+| **NFR-002** | System MUST handle [specific load, e.g., "1000 concurrent users"] |
+| **NFR-003** | System MUST maintain [availability target, e.g., "99.9% uptime"] |
+| **NFR-004** | System MUST scale to [capacity limit, e.g., "10,000 transactions per second"] |
+| **NFR-005** | System MUST recover within [time period, e.g., "5 minutes after failure"] |
| **NFR-006** | System MUST encrypt data [NEEDS CLARIFICATION: encryption scope not specified - at rest, in transit, both?] |
-| **NFR-007** | System MUST maintain audit logs for [NEEDS CLARIFICATION: retention period not specified] |
+| **NFR-007** | System MUST maintain audit logs for [NEEDS CLARIFICATION: retention period not specified] |
### Quality Attributes Addressed
-| Attribute | Target Metric |
-|-----------|---------------|
-| **Performance** | [e.g., "Response time < 200ms", "Throughput > 5000 TPS"] |
-| **Scalability** | [e.g., "Support 100,000 concurrent users", "Linear scaling to 10 nodes"] |
-| **Availability** | [e.g., "99.95% uptime", "Max 4 hours downtime per year"] |
-| **Reliability** | [e.g., "MTBF > 720 hours", "Error rate < 0.01%"] |
-| **Security** | [e.g., "OWASP Top 10 compliant", "SOC 2 Type II certified"] |
-| **Maintainability** | [e.g., "Code coverage > 80%", "Cyclomatic complexity < 10"] |
-| **Usability** | [e.g., "Task completion time < 2 minutes", "User satisfaction > 4.5/5"] |
+| Attribute | Target Metric |
+| ------------------- | ------------------------------------------------------------------------- |
+| **Performance** | [e.g., "Response time < 200ms", "Throughput > 5000 TPS"] |
+| **Scalability** | [e.g., "Support 100,000 concurrent users", "Linear scaling to 10 nodes"] |
+| **Availability** | [e.g., "99.95% uptime", "Max 4 hours downtime per year"] |
+| **Reliability** | [e.g., "MTBF > 720 hours", "Error rate < 0.01%"] |
+| **Security** | [e.g., "OWASP Top 10 compliant", "SOC 2 Type II certified"] |
+| **Maintainability** | [e.g., "Code coverage > 80%", "Cyclomatic complexity < 10"] |
+| **Usability** | [e.g., "Task completion time < 2 minutes", "User satisfaction > 4.5/5"] |
### Constraints *(include if applicable)*
-| Constraint | Description |
-|------------|-------------|
+| Constraint | Description |
+| ------------------ | --------------------------------------------------------------------- |
| **[Constraint 1]** | [Limitation or restriction, e.g., "Must run on Windows Server 2019+"] |
-| **[Constraint 2]** | [Compliance requirement, e.g., "Must comply with GDPR"] |
+| **[Constraint 2]** | [Compliance requirement, e.g., "Must comply with GDPR"] |
### Key Entities *(include if feature involves data)*
-| Entity | Description |
-|--------|-------------|
+| Entity | Description |
+| -------------- | ----------------------------------------------------------- |
| **[Entity 1]** | [What it represents, key attributes without implementation] |
-| **[Entity 2]** | [What it represents, relationships to other entities] |
+| **[Entity 2]** | [What it represents, relationships to other entities] |
---
diff --git a/README.md b/README.md
index fa4d33d1..c3538716 100644
--- a/README.md
+++ b/README.md
@@ -200,23 +200,23 @@ For more info see [Deploy GitHub Pages site](https://github.com/marketplace/acti
This table shows when each job runs based on the trigger scenario:
-| Job | Open/Updated PR | Merged PR | Abandoned PR | Manual Run |
-|-----|-----------------|-----------|--------------|------------|
-| **Get-Settings** | β
Always | β
Always | β
Always | β
Always |
-| **Lint-Repository** | β
Yes | β No | β No | β No |
-| **Build-Module** | β
Yes | β
Yes | β No | β
Yes |
-| **Build-Docs** | β
Yes | β
Yes | β No | β
Yes |
-| **Build-Site** | β
Yes | β
Yes | β No | β
Yes |
-| **Test-SourceCode** | β
Yes | β
Yes | β No | β
Yes |
-| **Lint-SourceCode** | β
Yes | β
Yes | β No | β
Yes |
-| **Test-Module** | β
Yes | β
Yes | β No | β
Yes |
-| **BeforeAll-ModuleLocal** | β
Yes | β
Yes | β No | β
Yes |
-| **Test-ModuleLocal** | β
Yes | β
Yes | β No | β
Yes |
-| **AfterAll-ModuleLocal** | β
Yes | β
Yes | β
Yes* | β
Yes |
-| **Get-TestResults** | β
Yes | β
Yes | β No | β
Yes |
-| **Get-CodeCoverage** | β
Yes | β
Yes | β No | β
Yes |
-| **Publish-Site** | β No | β
Yes | β No | β No |
-| **Publish-Module** | β
Yes** | β
Yes** | β
Yes*** | β
Yes** |
+| Job | Open/Updated PR | Merged PR | Abandoned PR | Manual Run |
+| ------------------------- | --------------- | ---------- | ------------ | ---------- |
+| **Get-Settings** | β
Always | β
Always | β
Always | β
Always |
+| **Lint-Repository** | β
Yes | β No | β No | β No |
+| **Build-Module** | β
Yes | β
Yes | β No | β
Yes |
+| **Build-Docs** | β
Yes | β
Yes | β No | β
Yes |
+| **Build-Site** | β
Yes | β
Yes | β No | β
Yes |
+| **Test-SourceCode** | β
Yes | β
Yes | β No | β
Yes |
+| **Lint-SourceCode** | β
Yes | β
Yes | β No | β
Yes |
+| **Test-Module** | β
Yes | β
Yes | β No | β
Yes |
+| **BeforeAll-ModuleLocal** | β
Yes | β
Yes | β No | β
Yes |
+| **Test-ModuleLocal** | β
Yes | β
Yes | β No | β
Yes |
+| **AfterAll-ModuleLocal** | β
Yes | β
Yes | β
Yes* | β
Yes |
+| **Get-TestResults** | β
Yes | β
Yes | β No | β
Yes |
+| **Get-CodeCoverage** | β
Yes | β
Yes | β No | β
Yes |
+| **Publish-Site** | β No | β
Yes | β No | β No |
+| **Publish-Module** | β
Yes** | β
Yes** | β
Yes*** | β
Yes** |
\* Runs for cleanup if tests were started
\*\* Only when all tests/coverage/build succeed
@@ -261,7 +261,7 @@ The following settings are available in the settings file:
| `Publish.Module.AutoCleanup` | `Boolean` | Automatically cleanup old prerelease module versions | `true` |
| `Publish.Module.AutoPatching` | `Boolean` | Automatically patch module version | `true` |
| `Publish.Module.IncrementalPrerelease` | `Boolean` | Use incremental prerelease versioning | `true` |
-| `Publish.Module.DatePrereleaseFormat` | `String` | Format for date-based prerelease ([.NET DateTime](https://learn.microsoft.com/dotnet/standard/base-types/standard-date-and-time-format-strings)) | `''` |
+| `Publish.Module.DatePrereleaseFormat` | `String` | Format for date-based prerelease ([.NET DateTime][netdt]) | `''` |
| `Publish.Module.VersionPrefix` | `String` | Prefix for version tags | `'v'` |
| `Publish.Module.MajorLabels` | `String` | Labels indicating a major version bump | `'major, breaking'` |
| `Publish.Module.MinorLabels` | `String` | Labels indicating a minor version bump | `'minor, feature'` |
@@ -453,3 +453,5 @@ The process is compatible with:
- [GitHub Flow specifications](https://docs.github.com/en/get-started/using-github/github-flow)
- [SemVer 2.0.0 specifications](https://semver.org)
- [Continuous Delivery practices](https://en.wikipedia.org/wiki/Continuous_delivery)
+
+[netdt]: https://learn.microsoft.com/dotnet/standard/base-types/standard-date-and-time-format-strings
diff --git a/tests/srcTestRepo/src/variables/public/Planets.ps1 b/tests/srcTestRepo/src/variables/public/Planets.ps1
index 736584b9..5927bc51 100644
--- a/tests/srcTestRepo/src/variables/public/Planets.ps1
+++ b/tests/srcTestRepo/src/variables/public/Planets.ps1
@@ -1,4 +1,4 @@
-$script:Planets = @(
+ο»Ώ$script:Planets = @(
@{
Name = 'Mercury'
Mass = 0.330
diff --git a/tests/srcTestRepo/tests/AfterAll.ps1 b/tests/srcTestRepo/tests/AfterAll.ps1
index 4329d916..8933adae 100644
--- a/tests/srcTestRepo/tests/AfterAll.ps1
+++ b/tests/srcTestRepo/tests/AfterAll.ps1
@@ -1,4 +1,4 @@
-Write-Warning "=== AFTERALL TEARDOWN SCRIPT EXECUTING ==="
+ο»ΏWrite-Warning "=== AFTERALL TEARDOWN SCRIPT EXECUTING ==="
Write-Warning "Tearing down test environment..."
# Example teardown tasks:
diff --git a/tests/srcTestRepo/tests/BeforeAll.ps1 b/tests/srcTestRepo/tests/BeforeAll.ps1
index 2001ccab..f487de58 100644
--- a/tests/srcTestRepo/tests/BeforeAll.ps1
+++ b/tests/srcTestRepo/tests/BeforeAll.ps1
@@ -1,4 +1,4 @@
-Write-Warning "=== BEFOREALL SETUP SCRIPT EXECUTING ==="
+ο»ΏWrite-Warning "=== BEFOREALL SETUP SCRIPT EXECUTING ==="
Write-Warning "Setting up test environment..."
# Example setup tasks:
diff --git a/tests/srcWithManifestTestRepo/src/variables/public/Planets.ps1 b/tests/srcWithManifestTestRepo/src/variables/public/Planets.ps1
index 736584b9..5927bc51 100644
--- a/tests/srcWithManifestTestRepo/src/variables/public/Planets.ps1
+++ b/tests/srcWithManifestTestRepo/src/variables/public/Planets.ps1
@@ -1,4 +1,4 @@
-$script:Planets = @(
+ο»Ώ$script:Planets = @(
@{
Name = 'Mercury'
Mass = 0.330
diff --git a/tests/srcWithManifestTestRepo/tests/AfterAll.ps1 b/tests/srcWithManifestTestRepo/tests/AfterAll.ps1
index 3d81902f..f6728d6f 100644
--- a/tests/srcWithManifestTestRepo/tests/AfterAll.ps1
+++ b/tests/srcWithManifestTestRepo/tests/AfterAll.ps1
@@ -1,4 +1,4 @@
-Write-Warning "=== AFTERALL TEARDOWN SCRIPT (Environments) EXECUTING ==="
+ο»ΏWrite-Warning "=== AFTERALL TEARDOWN SCRIPT (Environments) EXECUTING ==="
Write-Warning "Tearing down test environment for Environments..."
# Example teardown tasks for Environments directory:
diff --git a/tests/srcWithManifestTestRepo/tests/BeforeAll.ps1 b/tests/srcWithManifestTestRepo/tests/BeforeAll.ps1
index f0362f39..0b6bbcdc 100644
--- a/tests/srcWithManifestTestRepo/tests/BeforeAll.ps1
+++ b/tests/srcWithManifestTestRepo/tests/BeforeAll.ps1
@@ -1,4 +1,4 @@
-Write-Warning "=== BEFOREALL SETUP SCRIPT EXECUTING ==="
+ο»ΏWrite-Warning "=== BEFOREALL SETUP SCRIPT EXECUTING ==="
Write-Warning "Setting up test environment..."
# Example setup tasks for test environment: