diff --git a/.github/linters/.jscpd.json b/.github/linters/.jscpd.json deleted file mode 100644 index 07f77a4..0000000 --- a/.github/linters/.jscpd.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "threshold": 0, - "reporters": [ - "consoleFull" - ], - "ignore": [ - "**/tests/**", - "**/media/**" - ], - "absolute": true -} diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml deleted file mode 100644 index 7d96392..0000000 --- a/.github/linters/.markdown-lint.yml +++ /dev/null @@ -1,26 +0,0 @@ -########################### -## Markdown Linter rules ## -########################### - -# Linter rules doc: -# - https://github.com/DavidAnson/markdownlint - -############### -# Rules by id # -############### -MD004: false # Unordered list style -MD007: - indent: 2 # Unordered list indentation -MD013: - line_length: 3000 # Line length -MD026: - punctuation: ".,;:!。,;:" # List of not allowed -MD029: false # Ordered list item prefix -MD033: false # Allow inline HTML -MD036: false # Emphasis used instead of a heading -MD041: false # First line in file should be a top level heading, PULL_REQUEST_TEMPLATE.md is an exception - -################# -# Rules by tags # -################# -blank_lines: false # Error on blank lines diff --git a/.github/linters/.powershell-psscriptanalyzer.psd1 b/.github/linters/.powershell-psscriptanalyzer.psd1 deleted file mode 100644 index 09cc3d0..0000000 --- a/.github/linters/.powershell-psscriptanalyzer.psd1 +++ /dev/null @@ -1,56 +0,0 @@ -@{ - Rules = @{ - PSAlignAssignmentStatement = @{ - Enable = $true - CheckHashtable = $true - } - PSAvoidLongLines = @{ - Enable = $true - MaximumLineLength = 150 - } - PSAvoidSemicolonsAsLineTerminators = @{ - Enable = $true - } - PSPlaceCloseBrace = @{ - Enable = $true - NewLineAfter = $false - IgnoreOneLineBlock = $true - NoEmptyLineBefore = $false - } - PSPlaceOpenBrace = @{ - Enable = $true - OnSameLine = $true - NewLineAfter = $true - IgnoreOneLineBlock = $true - } - PSProvideCommentHelp = @{ - Enable = $true - ExportedOnly = $false - BlockComment = $true - VSCodeSnippetCorrection = $false - Placement = 'begin' - } - PSUseConsistentIndentation = @{ - Enable = $true - IndentationSize = 4 - PipelineIndentation = 'IncreaseIndentationForFirstPipeline' - Kind = 'space' - } - PSUseConsistentWhitespace = @{ - Enable = $true - CheckInnerBrace = $true - CheckOpenBrace = $true - CheckOpenParen = $true - CheckOperator = $true - CheckPipe = $true - CheckPipeForRedundantWhitespace = $true - CheckSeparator = $true - CheckParameter = $true - IgnoreAssignmentOperatorInsideHashTable = $true - } - } - ExcludeRules = @( - 'PSMissingModuleManifestField', # This rule is not applicable until the module is built. - 'PSUseToExportFieldsInManifest' - ) -} diff --git a/.github/linters/.textlintrc b/.github/linters/.textlintrc deleted file mode 100644 index db48de8..0000000 --- a/.github/linters/.textlintrc +++ /dev/null @@ -1,513 +0,0 @@ -{ - "filters": { - "comments": true - }, - "rules": { - "terminology": { - "defaultTerms": false, - "terms": [ - "Airbnb", - "Android", - "AppleScript", - "AppVeyor", - "AVA", - "BrowserStack", - "Browsersync", - "Codecov", - "CodePen", - "CodeSandbox", - "DefinitelyTyped", - "EditorConfig", - "ESLint", - "GitHub", - "GraphQL", - "GraphiQL", - "iOS", - "JavaScript", - "JetBrains", - "jQuery", - "LinkedIn", - "Lodash", - "MacBook", - "Markdown", - "OpenType", - "PayPal", - "PhpStorm", - "PowerShell", - "PlayStation", - "RubyMine", - "Sass", - "SemVer", - "TypeScript", - "UglifyJS", - "Wasm", - "WebAssembly", - "WebStorm", - "WordPress", - "YouTube", - [ - "Common[ .]js", - "CommonJS" - ], - [ - "JSDocs?", - "JSDoc" - ], - [ - "Node[ .]js", - "Node.js" - ], - [ - "React[ .]js", - "React" - ], - [ - "SauceLabs", - "Sauce Labs" - ], - [ - "StackOverflow", - "Stack Overflow" - ], - [ - "styled ?components", - "styled-components" - ], - [ - "HTTP[ /]2(?:\\.0)?", - "HTTP/2" - ], - [ - "OS X", - "macOS" - ], - [ - "Mac ?OS", - "macOS" - ], - [ - "a npm", - "an npm" - ], - "ECMAScript", - [ - "ES2015", - "ES6" - ], - [ - "ES7", - "ES2016" - ], - "3D", - [ - "3-D", - "3D" - ], - "Ajax", - "API", - "APIs", - "API's", - [ - "(? -
| Name | -Description | -Version | -
|---|
| Name | -Description | -Version | -
|---|
| Name | -Description | -Version | -
|---|
| Name | -Description | -Version | -
|---|
This is a test blog post.
+ + +This is a test blog post.
+ + +Welcome to the PSModule blog! Here you'll find the latest news, updates, and insights related to PowerShell + GitHub development.
+This is a test blog post.
+ + +Welcome to the PSModule Dictionary - a comprehensive glossary of terms, concepts, and technologies used throughout our projects and documentation.
+Common terms you might encounter: +- API - Application Programming Interface +- Azure - Microsoft's cloud platform +- CI/CD - Continuous Integration/Continuous Deployment +- Cmdlet - PowerShell command +- Git - Version control system +- GitHub - Code hosting platform +- LTS - Long-Term Servicing +- MkDocs - Documentation generator +- Module - PowerShell package +- Pipeline - Automated process chain +- PowerShell - Task automation framework +- Repository - Code storage location +- Workflow - Automated process series
+This dictionary serves as a reference for developers, contributors, and users to understand the terminology and concepts used in PSModule projects. Each entry includes clear definitions, usage examples, and related links where applicable.
+Application Programming Interface (API) - A set of protocols, routines, and tools for building software applications. APIs specify how software components should interact and are used when programming graphical user interface (GUI) components.
+Example: The GitHub API allows developers to interact with GitHub repositories, issues, and pull requests programmatically.
+Microsoft's cloud computing platform that provides a wide range of cloud services, including compute, analytics, storage, and networking.
+Related: Azure Functions, Azure DevOps
+A set of development tools and services from Microsoft for software development teams, including version control, build automation, and project management.
+A serverless compute service that lets you run event-triggered code without having to explicitly provision or manage infrastructure.
+In version control systems like Git, a branch is a parallel version of a repository that diverges from the main working project.
+Example: Feature branches are used to develop new features in isolation before merging back to the main branch.
+An automated process that compiles, tests, and packages source code into deployable artifacts.
+Continuous Integration/Continuous Deployment (CI/CD) - A software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run.
+A lightweight PowerShell command that follows the verb-noun naming convention and is designed to perform a specific function.
+Example: Get-Process, Set-Location, New-Item
A lightweight, standalone, executable package that includes everything needed to run an application: code, runtime, system tools, libraries, and settings.
+A set of practices that combines software development (Dev) and IT operations (Ops) to shorten the systems development life cycle and provide continuous delivery.
+A platform for developing, shipping, and running applications using containerization technology.
+A distributed version control system for tracking changes in source code during software development.
+A web-based platform for version control and collaboration that lets you and others work together on projects from anywhere.
+GitHub's built-in CI/CD platform that allows you to automate your build, test, and deployment pipeline.
+Example: Automatically running tests when a pull request is created.
+Long-Term Servicing (LTS). +For more info visit: PowerShell Support Lifecycle
+A lightweight markup language with plain text formatting syntax, designed to be converted to HTML and many other formats.
+A fast, simple static site generator that's geared towards building project documentation using Markdown files.
+In PowerShell, a package that contains PowerShell members, such as cmdlets, providers, functions, workflows, variables, and aliases.
+A series of automated processes that allow developers and DevOps professionals to reliably and efficiently compile, build, and deploy their code.
+A task automation and configuration management framework from Microsoft, consisting of a command-line shell and the associated scripting language.
+Pull Request (PR) - A method of submitting contributions to a software project where changes are proposed and reviewed before being merged into the main codebase.
+Repository (Repo) - A storage location for software packages, often used in version control systems to store project files and their revision history.
+An architectural style for designing web services that uses HTTP requests to GET, PUT, POST, and DELETE data.
+Semantic Versioning (SemVer) - A versioning scheme that uses a three-part version number: MAJOR.MINOR.PATCH, where each part is incremented based on the type of changes made.
+Example: Version 1.2.3 where 1 is major, 2 is minor, and 3 is patch.
+A tool that generates a full static HTML website based on raw data and a set of templates.
+A pre-designed format or structure that can be used as a starting point for creating new files, projects, or configurations.
+The process of evaluating and verifying that a software application or system meets specified requirements and functions correctly.
+A system that records changes to a file or set of files over time so that you can recall specific versions later.
+An isolated environment that allows you to install packages and dependencies without affecting the global system installation.
+A series of automated steps or processes that execute in response to specific events or triggers.
+Example: A GitHub Actions workflow that runs tests every time code is pushed to a repository.
+YAML Ain't Markup Language (YAML) - A human-readable data serialization standard commonly used for configuration files and data exchange.
+Example: GitHub Actions workflows are defined using YAML files.
+Contributing to the Dictionary
+Found a term that should be added or need to update an existing definition? Please create an issue or submit a pull request with your suggestions.
+Search Functionality
+Use the search feature in the top navigation to quickly find specific terms and their definitions across the entire documentation site.
+This document defines the structure and guidelines for writing Pester tests for PowerShell functions. The goal is to ensure consistency and comprehensive test coverage while maintaining clarity.
+Each function is tested within a structured Pester Describe block that follows this hierarchy:
Describe#Describe block corresponds to the module.Describe#Describe block.Context#Context block.Get-Uri - simple usageGet-Uri - Pipeline usageGet-Uri - ParameterSet: DetailedIt Statements#It block tests a specific aspect of the function's behavior.FunctionName - <expected behavior>Get-Uri - gets the URI object when provided a stringGet-Uri - returns $null when input is emptyGet-Uri - throws error on invalid inputDescribe 'Uri' {
+ Describe 'Get-Uri' {
+ Context 'Get-Uri - simple usage' {
+ It 'Get-Uri - gets the URI object when provided a string' {
+ $result = Get-Uri -InputString 'https://example.com'
+ $result | Should -BeOfType [System.Uri]
+ }
+ }
+
+ Context 'Get-Uri - Pipeline usage' {
+ It 'Get-Uri - processes input from the pipeline' {
+ $result = 'https://example.com' | Get-Uri
+ $result | Should -BeOfType [System.Uri]
+ }
+ }
+ }
+}
+This ensures our tests are structured, maintainable, and adhere to best practices.
+ + + + + + + + + + + + + + + + + + + + + + +This document defines how changes to a PowerShell module’s public interface determine updates to its version number under Semantic Versioning (SemVer). Semantic Versioning uses a three-part version format: MAJOR.MINOR.PATCH, where each part is incremented based on the nature of changes: +- MAJOR version is incremented for incompatible API changes (breaking changes) (Semantic Versioning 2.0.0 | Semantic Versioning). +- MINOR version is incremented for added functionality that is backward compatible (new features) (Semantic Versioning 2.0.0 | Semantic Versioning). +- PATCH version is incremented for backward-compatible bug fixes or minor improvements (Semantic Versioning 2.0.0 | Semantic Versioning).
+In the context of a PowerShell module, the “public API” consists of all exported functions/cmdlets, public variables, classes, and enums that consumers of the module can use. Changes to these exported elements will dictate whether the version bump is major, minor, or patch. Internal changes that do not affect the exported interface are generally not reflected in the version. The following sections categorize changes and the required version update level, ensuring a consistent and predictable versioning strategy.
+A major version bump signifies a breaking change in the module’s public interface. Any modification that could cause existing scripts or code relying on the module to fail or change behavior in an incompatible way requires incrementing the MAJOR version. These include:
+Removal or Renaming of Exported Commands or Elements: Removing an exported function/cmdlet, variable, class, or enum, or renaming any of these, is a breaking change. Consumers referencing the old name will encounter errors because the item no longer exists or has a different name. (Example: Get-ItemFoo was exported in the previous version but is removed or renamed to Get-FooItem in the new version. Scripts calling Get-ItemFoo will break.) This kind of change must increment the major version to signal the break.
Changes to Function Signatures: Modifying the signature of an exported function or cmdlet in a non-backward-compatible way triggers a major bump. This includes:
+Example: An exported function Invoke-ProcessData -Path <string> is changed to Invoke-ProcessData -Uri <string> (parameter renamed) or an existing parameter is removed. Scripts using the old parameter name or expecting that parameter will fail, hence a major version increment is needed.
Example: An exported class FileClient had a public property Timeout that is removed or renamed, or a method Connect(string server) is changed to Connect(Uri server). Code instantiating FileClient or calling its methods would break, so the major version must increase.
Example: An exported enum LogLevel had members Info, Warning, Error. If Warning is removed or renamed to Warn, any script using LogLevel.Warning will break. Such a change mandates a major version bump. (Adding a new enum value is not breaking – see Minor changes.)
Rationale: According to Semantic Versioning, introducing changes that are not backward compatible requires a major version increment (Semantic Versioning 2.0.0 | Semantic Versioning). By increasing the major version, we communicate to users that they may need to adjust their scripts due to breaking changes. This aligns with the principle that “MAJOR version when you make incompatible API changes” (Semantic Versioning 2.0.0 | Semantic Versioning). For example, if a function or parameter that existed in version 1.x is no longer present in version 2.0, that is an incompatible API change. Our versioning policy follows this rule strictly: breaking changes will never be introduced in a minor or patch release, ensuring that patch and minor updates can be safely adopted without fear of script-breaking surprises.
+A minor version bump is used for new features and additions that are backward compatible with the existing public API. These changes enhance the module’s functionality without breaking any existing usage. In other words, existing scripts will continue to work as before, and new capabilities are introduced. Changes that trigger a MINOR version increase include:
+Adding New Exported Functions/Cmdlets: Introducing a new function or cmdlet to the module is a backward-compatible addition. Since it does not remove or change existing functions, nothing breaks; users simply have an additional function available. Example: Adding a new cmdlet New-Report to the module (where it didn’t exist before) would be a new feature. This warrants a minor version bump because it’s an additive, non-breaking change.
Adding New Parameters to Existing Functions: If you extend an existing function’s capabilities by adding a new parameter in a way that does not break existing calls, it is a minor change. The key here is that the new parameter must be optional or have a default value such that any existing calls (which don’t pass this parameter) still work exactly as before. In semantic versioning terms, this is adding functionality in a backwards-compatible manner (semantic versioning - Does adding a parameter to a function definition require a new major version? - Stack Overflow).
+-Force switch or an optional -TimeoutSeconds parameter (with a default value) to a function is a minor update. Users can start using the new parameter if they want the new behavior, but all old usages remain valid.Important: If a new parameter is added as required (with no default), that breaks existing calls (which would now be missing a required argument), and thus would be a breaking change requiring a major bump (semantic versioning - Does adding a parameter to a function definition require a new major version? - Stack Overflow). So, new parameters must be introduced in a backward-compatible way (optional or with defaults) to qualify as a minor version update.
+Adding New Exported Variables: If the module begins to export a new public variable (for example, a new preference variable or a constant) that wasn’t present before, it’s an additive change. Since no existing variable is removed or changed, existing scripts are unaffected (they simply might not use or know about the new variable). This constitutes a minor version increment. Example: Adding a new $PublicConfig variable that scripts can read is a new feature, bumped in the minor version.
Adding New Classes or Members: Introducing a new public class (exported from the module) or adding new members to an existing exported class in a non-breaking way is a minor change:
+Adding a new method or property to an existing exported class can be considered backward compatible as long as it doesn’t conflict with existing members. Existing scripts constructing or using the class will continue to work as before. (One caveat: if consumers have derived from this class, adding new abstract members would be breaking, but assuming typical usage where classes are used as-is, new members are just additional features.)
+ Example: A class Connection gains a new method TestConnection() in version 1.2. Previous scripts using Connection are not affected (they don’t call the new method), but now have the option to use TestConnection. This is a minor feature addition.
Adding New Enum Values or New Enums: If the module introduces a new enumeration type, or adds additional members to an existing enum, it’s generally treated as a backward-compatible addition:
+Color with values Red/Green/Blue) is additive.New Value in Existing Enum: Adding a value to an existing exported enum can be viewed as a new feature. Code that doesn’t know about the new value isn’t forced to use it. (Existing switch statements or logic that enumerate enum values may not account for it, but they won’t immediately break at runtime; however, developers should update their code to handle the new case if appropriate. Since it doesn’t outright break compilation or invocation in PowerShell, it’s considered backward compatible in this context.)
+ Example: The enum LogLevel had Info, Warning, Error. If we add Verbose as a new level in a minor release, existing scripts using LogLevel continue to run (they might not handle Verbose if encountered, but nothing crashes by the mere presence of the new value). It’s an additive feature, hence a minor bump.
Non-Breaking Changes to Existing Features: In some cases, a change might alter behavior but still be backward compatible. For instance, making an existing parameter accept a new type of input in addition to existing types (broadening what is accepted) could be considered a new capability that doesn’t break old usage. Such changes can fall under minor version if they extend functionality without removal or contradiction of the old behavior. (However, caution is advised: changing behavior can sometimes surprise users. If in doubt, treat as major if it might disrupt assumptions.)
+In summary, any new functionality that does not force existing users to change their usage is a candidate for a minor version increment (Semantic Versioning 2.0.0 | Semantic Versioning). Minor releases accumulate enhancements and new features, signalling to users that new capabilities are available, but all existing scripts should continue to work as they did in the previous version. Users can upgrade to the new minor version and gain new functions or options without needing to modify their existing code. This aligns with the SemVer guideline that “MINOR version [increments] when you add functionality in a backward compatible manner” (Semantic Versioning 2.0.0 | Semantic Versioning).
+A patch version bump is used for changes that do not affect the module’s public API or add new features, but rather fix issues or improve internal implementation. Patch updates are meant to be safe, drop-in updates for users, with no risk of breaking functionality or changing how features are used. Scenarios for a PATCH version increment include:
+Resolving a minor issue where an enum value wasn’t handled in an internal function (assuming no public API change). + As long as the outward-facing contract remains the same (same function name, parameters, outputs), these are patch changes. Consumers might notice the bug is resolved, but they do not need to change their code – they just get the benefit of the fix.
+Performance Improvements: Optimizations that improve the performance or efficiency of the module without affecting the external behavior or API. For instance, rewriting an algorithm inside a function to run faster or use less memory, but with the same input/output interface and results, qualifies as a patch. Users’ experience may improve (faster execution), but they don’t need to change anything in their usage. This is a non-breaking internal improvement.
+Refactoring and Internal Cleanup: Changes to the internal code structure, organization, or quality that do not change any aspect of the public interface or observable behavior fall under patch (or possibly no version change at all – see the next section). If you release a new version that purely refactors code (improves maintainability, updates comments, reorganizes module files) and the module’s exported functions and behavior remain identical, it can be considered a patch update. From the user’s perspective, nothing changed functionally, so there’s no new feature (hence not a minor) and no break (hence not a major). Releasing it as a patch version indicates it’s a minor improvement or maintenance release.
+Documentation or Metadata Updates: If you publish a new version to update documentation included in the module (e.g., help content) or to adjust module metadata (like author info, tags, etc.) without any code change affecting functionality, this would be a patch version increment. (However, often documentation changes alone might not necessitate a new release; if they do, patch is appropriate since the API is unchanged.)
+Note: A patch release should not introduce any new public surface area or change the meaning of anything in the public API. It is strictly for fixes and invisible improvements. According to SemVer rules, “PATCH version when you make backwards-compatible bug fixes” (Semantic Versioning 2.0.0 | Semantic Versioning) – this includes fixes and minor tweaks that do not affect compatibility. Users upgrading from one patch version to the next within the same minor series (e.g., 1.2.3 to 1.2.4) should notice no differences except the resolved issues or performance gains. They do not get new features (and thus don’t need to learn anything new), and they do not have to worry about breaks.
+Certain changes do not require any version number increase at all, because they have no effect on the module’s outward-facing behavior or interface. In a disciplined development practice, if the only changes in a commit or release are purely internal and produce no difference in functionality or API, the version can remain the same. In practice, such changes are often bundled with other changes or released as patch versions if needed. But as a guideline, metadata or refactoring changes that do not impact the exported interface should not influence the version number (they are essentially “no-ops” as far as the user is concerned). Examples:
+Refactoring without Behavioral Changes: If the code is refactored (e.g., splitting a large function into smaller private helper functions, renaming internal variables, improving readability) but the exported functions, classes, and variables all behave exactly the same and have the same signatures, then there’s no need for a version change. The module behaves identically from the consumer’s perspective.
+Build System or Test Changes: Updates to the module’s build scripts, continuous integration configuration, or test suite do not require a version bump. These are changes for the developers/maintainers and do not ship to the user in a way that affects usage.
+Metadata Updates: Changing non-functional metadata such as author name, project URL, licensing info, etc., in the module manifest (PSD1) doesn’t affect how the module is used at runtime. Such changes alone don’t merit a version increment.
+Formatting and Comments: Modifying code formatting, comments, or other non-executable parts of the code has no effect on functionality. No version change is needed for these kinds of modifications alone.
+No-Op Rebuilds: In some cases, a module might be rebuilt or repackaged without any code changes (for example, re-signing the module or packaging it differently). If the contents of the module’s public API and behavior are unchanged, the version number should ideally remain the same. (If a rebuild must be published, one might use the same version or a patch if required by tooling, but from a semantic standpoint, nothing changed.)
+In summary, if a change does not modify or add to the public interface and does not fix a user-facing bug, it should not cause any visible version change. The automated versioning scripts or maintainers should ignore such changes when determining how to bump the version. Essentially, purely internal changes = no bump (or at most a patch if a release is needed for some reason). This ensures the version number reflects meaningful changes that users care about.
+(Note: In practice, every release must have a unique version. So if you are releasing changes that have no API impact, you might still increment the patch to publish it. But the key is that those internal changes by themselves never escalate the version beyond patch, and if they are truly no-ops, you might choose not to release until there’s a user-facing change.)
+This module follows a “latest version” support strategy, meaning that only the most recent release is fully supported and maintained. When a new version is released, it supersedes previous versions. Older versions are not maintained, and users are expected to upgrade to the latest version to receive fixes and new features. As stated in Microsoft’s guidance for PowerShell modules: “Only the latest major version receives full support, including new features, bug fixes, and updates. We strongly recommend upgrading to the latest version…” (Versioning, release cadence, and breaking changes - Microsoft Entra PowerShell | Microsoft Learn). In our context, this means:
+We do not create maintenance releases for older major versions. For example, if the module is currently at 2.x, we will not typically release further updates for 1.x; any fixes or enhancements will go into a new 2.x (or later) release. The focus is on moving forward with the latest version of the module.
+Breaking changes will be introduced only with a major version bump, and when we do increment the major version, users should plan to update their scripts to accommodate those changes. Since older majors won’t get back-ported fixes, upgrading is important to stay supported.
+Minor and patch releases are intended to be safe to adopt (no breaking changes). Users should feel confident updating to a new minor version within the same major series to get new features, and applying patch updates for bug fixes. Given that we don’t maintain parallel old versions, applying these updates is the primary way to get issues resolved.
+Semantic versioning in this module serves as a contract with users: by looking at how the version changed, users can tell what to expect:
+By adhering to this strategy, we ensure clarity and consistency. Users who always upgrade to the latest version will benefit from all improvements and will only need to make script changes when a major version increments (which will be clearly indicated by the version number change).
+To enforce the above rules, we will use custom PowerShell scripts as part of our build/release process to automatically determine the appropriate version bump based on the changes in the module. The automation will compare the module’s exported interface between the current release and the new version under development: +- It will detect additions of public elements (functions, parameters, variables, classes, enum values) and detect removals or changes to public elements. +- Based on this comparison, the script will decide the version increment: + - If new public functions, new optional parameters, or other new exported members are found (and no breaking changes), the script will set the version bump to Minor (since new functionality has been added in a backwards-compatible way). + - If any exported function/variable/class/enum from the previous version is missing in the new version, or a function’s signature has changed incompatibly, etc., the script will flag a Major bump (since a breaking change was detected). + - If no differences in the public API are found (meaning no new features and no removed/changed features), then the changes must be purely fixes or internal improvements. In this case, the script will default to a Patch bump (PowerShell: Automatic Module Semantic Versioning).
+This approach mirrors the “fingerprint” strategy: generating a list (fingerprint) of all public API elements (e.g., FunctionName:ParameterName for each parameter of each function, plus entries for other exported members) for the current and previous version, and comparing them (PowerShell: Automatic Module Semantic Versioning) (PowerShell: Automatic Module Semantic Versioning).
+- If the new fingerprint has entries not present in the old fingerprint, those represent new capabilities (triggering a minor version increase) (PowerShell: Automatic Module Semantic Versioning).
+- If the old fingerprint has entries not present in the new fingerprint, those represent removed or changed items (triggering a major version increase) (PowerShell: Automatic Module Semantic Versioning).
+- If neither additions nor removals are detected, only patch-level changes exist (PowerShell: Automatic Module Semantic Versioning).
Using automation ensures that our versioning rules are applied consistently on every release. However, we will also manually review changes for any subtleties that automation might miss. For example, a change in behavior that is technically backward-compatible in the API surface might still be communicated as a bigger change if it could impact users (the automation might view it as no API change, but maintainers might still choose to bump minor for a significant new behavior or even major if a fix alters expected outcomes in rare cases). The tooling serves as a baseline, and maintainers can override or augment the decision if necessary (but always adhering to the rule that breaking changes cannot be released under a non-major bump).
+Example of the automated logic in practice:
+Suppose in version 1.3.0 the module has a function Get-Data -Path <string> and in the development code we change this to Get-Data -Path <string> -Filter <string>, where -Filter is a new optional parameter. The script compares the exported interface:
+- Old version fingerprint might include an entry like Get-Data:Path for the parameter.
+- New version fingerprint includes Get-Data:Path and Get-Data:Filter.
+The new fingerprint has an entry not in the old (Get-Data:Filter), indicating a new parameter. The old fingerprint has none that the new lacks (we didn’t remove anything; Path is still there). So the tool will identify a new feature addition with no removals, resulting in a Minor bump (1.4.0). This matches our expectation: adding an optional -Filter parameter is a backward-compatible enhancement.
If instead we had removed -Path or renamed Get-Data to Get-ItemData, the old fingerprint would contain entries not in the new, flagging a breaking change. The script would then recommend a Major bump (to 2.0.0), aligning with our policy that such a removal/rename is breaking.
If we only fixed a bug inside Get-Data but made no changes to its parameters or outputs, the fingerprints would be identical. The automation would not find any new or removed public element, and thus default to a Patch bump (1.3.1). This ensures even unseen internal changes result in at least a patch update if a release is made, but nothing more.
This specification provides a clear framework for versioning a PowerShell module in accordance with Semantic Versioning principles, tailored to the specific elements of a PowerShell module’s public interface. By classifying changes into major, minor, or patch categories, we ensure that the module’s version number accurately communicates the impact of changes: +- Major versions for breaking changes (removals, renames, incompatible alterations). +- Minor versions for new features and additions that are backward compatible. +- Patch versions for bug fixes and non-breaking improvements.
+Developers maintaining the module can use these guidelines to decide the appropriate version number for each release. Automated scripts will assist in detecting the scope of changes, but sound judgment will be applied in edge cases. Users of the module can rely on the version number to understand the significance of an update. Ultimately, this practice enables a predictable upgrade path where users only need to be concerned about potential breaking changes when the major version increases, and are otherwise free to take minor and patch updates confidently.
+By adhering to this specification, we uphold a contract of compatibility and improvement with our users, making module releases transparent and manageable in the long run.
+ + + + + + + + + + + + + + + + + + + + + + +This specification documents a scalable GitHub Copilot customization architecture designed to provide consistent guidance, prompts, and chat modes +across multiple repositories in community organizations and enterprises.The architecture addresses the challenge of managing GitHub Copilot +configurations at scale by implementing a multi-tier approach that balances centralized governance with project-specific flexibility. This system +enables organizations to:
+The architecture replaces GitHub Copilot's single-file approach with a structured three-tier system that manages instructions, prompts, and chat modes +through a hierarchical precedence model.
+Modern software organizations require a structured system for managing GitHub Copilot configuration files that enables AI agents to make consistent +changes across multiple repositories while allowing for project-specific customization.
+Due to the absence of native organization-wide configuration support in GitHub that provides a single location for common Copilot configurations, this +architecture implements a scalable multi-tier approach for managing:
+This architecture serves multiple organizational contexts: +- Enterprises: Large organizations needing centralized AI assistance standards across teams and projects +- Enterprise Adoption: Enterprises adopting community frameworks while maintaining their own customizations +- Multi-Division Enterprises: Large organizations with division-specific requirements within enterprise standards +- Community Organizations: Open source projects and community frameworks requiring consistent standards across repositories
+Each Copilot configuration type follows a flexible three-tier management approach:
+This design allows organizations to: +- Enforce enterprise-wide governance and compliance requirements +- Adopt community standards and frameworks as a foundation +- Allow repository-level customization within enterprise and organizational constraints
+The file .github/copilot-instructions.md is not supported in this architecture. This specification replaces the simplified single-file approach with
+ a structured system that manages all GitHub Copilot configuration files through multi-tier management.
The multi-tier Copilot files can be automatically synchronized from different sources:
+Enterprise Tier Synchronization: +- Source: Enterprise's central configuration repository +- Target: Enterprise repositories (optional, based on enterprise policy) +- Content: Enterprise-specific customizations, compliance requirements, security patterns
+Organization Tier Synchronization: +- Source: Community framework or organization's base repository +- Target: All repositories adopting the framework +- Content: Universal patterns and base standards
+Repository Tier Management: +- Source: Local repository maintenance +- Target: Current repository only +- Content: Project-specific overrides and customizations
+The synchronization process applies to all Copilot configuration types:
+- Updates: Files under organization/ and enterprise/ folders are managed by automation
+- Preserves: All files under repository/ folders are never modified by sync mechanisms
+- Flexibility: Organizations can choose which tiers to implement and their synchronization criteria
The .github/ folder contains three Copilot configuration directories, each supporting the three-tier structure:
.github/
+├── instructions/ # AI agent guidance and patterns
+│ ├── enterprise/ # Enterprise-managed customizations (automated sync, optional)
+│ │ ├── main.instructions.md # Enterprise-wide guidelines and compliance
+│ │ └── {Language}/ # Enterprise language-specific patterns
+│ │ ├── main.instructions.md # Enterprise style guides (e.g., C# enterprise standards)
+│ │ └── {context}.instructions.md # Enterprise context requirements
+│ ├── organization/ # Community/framework-managed patterns (automated sync)
+│ │ ├── main.instructions.md # Core framework guidelines
+│ │ └── {Language}/ # Language-specific framework patterns
+│ │ ├── main.instructions.md # Style guide and core instructions
+│ │ └── {context}.instructions.md # Specialized context instructions
+│ └── repository/ # Repository-managed overrides (manual)
+│ ├── main.instructions.md # Repository context and specific rules
+│ └── {Language}/ # Repository-specific language customizations
+│ ├── main.instructions.md # Repository language patterns
+│ └── {context}.instructions.md # Repository context overrides
+├── prompts/ # Reusable prompt templates
+│ ├── enterprise/ # Enterprise-specific prompts (automated sync, optional)
+│ │ └── {prompt-files} # Enterprise-customized prompt templates
+│ ├── organization/ # Community/framework prompts (automated sync)
+│ │ └── {prompt-files} # Standard framework prompt templates
+│ └── repository/ # Repository-specific prompts (manual)
+│ └── {prompt-files} # Project-specific prompt templates
+└── chatmodes/ # Specialized conversation contexts
+ ├── enterprise/ # Enterprise-specific chat modes (automated sync, optional)
+ │ └── {chatmode-files} # Enterprise-customized chat modes
+ ├── organization/ # Community/framework chat modes (automated sync)
+ │ └── {chatmode-files} # Standard framework chat modes
+ └── repository/ # Repository-specific chat modes (manual)
+ └── {chatmode-files} # Project-specific chat modes
+| Configuration Type | +Tier | +File Path | +Management | +Description | +
|---|---|---|---|---|
| Instructions | +Enterprise | +instructions/enterprise/main.instructions.md |
+Enterprise-Managed, Optional | +Enterprise-wide guidelines, compliance requirements, and governance | +
| Instructions | +Enterprise | +instructions/enterprise/{Language}/main.instructions.md |
+Enterprise-Managed, Optional | +Enterprise-specific language standards (e.g., "C# Enterprise coding standards") | +
| Instructions | +Enterprise | +instructions/enterprise/{Language}/{context}.instructions.md |
+Enterprise-Managed, Optional | +Enterprise-specific patterns for compliance, security, or organizational needs | +
| Instructions | +Organization | +instructions/organization/main.instructions.md |
+Community/Framework-Managed | +Universal framework guidelines and architectural principles | +
| Instructions | +Organization | +instructions/organization/{Language}/main.instructions.md |
+Community/Framework-Managed | +Community standard style guides and language-specific patterns | +
| Instructions | +Organization | +instructions/organization/{Language}/{context}.instructions.md |
+Community/Framework-Managed | +Framework-specific patterns for specialized scenarios | +
| Instructions | +Repository | +instructions/repository/main.instructions.md |
+Repository-Managed | +Repository-specific context, technology stack, and project rules | +
| Instructions | +Repository | +instructions/repository/{Language}/main.instructions.md |
+Repository-Managed | +Project-specific language overrides and patterns | +
| Instructions | +Repository | +instructions/repository/{Language}/{context}.instructions.md |
+Repository-Managed | +Most specific project-based overrides | +
| Prompts | +Enterprise | +prompts/enterprise/{name}.prompt.md |
+Enterprise-Managed, Optional | +Enterprise-customized prompt templates incorporating company standards | +
| Prompts | +Organization | +prompts/organization/{name}.prompt.md |
+Community/Framework-Managed | +Standard community prompt templates for common development scenarios | +
| Prompts | +Repository | +prompts/repository/{name}.prompt.md |
+Repository-Managed | +Project-specific prompt templates tailored to repository requirements | +
| Chat Modes | +Enterprise | +chatmodes/enterprise/{name}.chatmode.md |
+Enterprise-Managed, Optional | +Enterprise-specific conversation contexts incorporating company culture and standards | +
| Chat Modes | +Organization | +chatmodes/organization/{name}.chatmode.md |
+Community/Framework-Managed | +Standard conversation contexts and AI behaviors from the community | +
| Chat Modes | +Repository | +chatmodes/repository/{name}.chatmode.md |
+Repository-Managed | +Project-specific conversation contexts and behaviors | +
For instructions, context-specific files may include:
+- File extension patterns: tests.instructions.md, classes.instructions.md
+- Folder-specific patterns: workflows.instructions.md, docs.instructions.md
+- Functional patterns: api.instructions.md, config.instructions.md, compliance.instructions.md
Instructions are evaluated and applied in hierarchical order, with more specific instructions taking precedence:
+instructions/enterprise/main.instructions.md) - Enterprise-wide governance and complianceinstructions/enterprise/{Language}/main.instructions.md) - Enterprise language standardsinstructions/enterprise/{Language}/{context}.instructions.md) - Enterprise specialized requirementsinstructions/organization/main.instructions.md) - Community/framework base patternsinstructions/organization/{Language}/main.instructions.md) - Community language-specific patternsinstructions/organization/{Language}/{context}.instructions.md) - Community specialized patternsinstructions/repository/main.instructions.md) - Project-specific context and overridesinstructions/repository/{Language}/main.instructions.md) - Project-specific language patternsinstructions/repository/{Language}/{context}.instructions.md) - Project-specific customizationsFor prompts and chat modes, the precedence follows the three-tier approach:
+When multiple tiers have the same prompt/chat mode, the enterprise tier takes highest precedence, followed by organization tier, then repository tier.
+Organizations can choose to implement: +- Two-tier: Organization + Repository (skip enterprise tier) +- Three-tier: Organization + Enterprise + Repository (full implementation) +- Enterprise-only: Enterprise + Repository (for enterprises with internal frameworks)
+Repositories transitioning from legacy approaches should:
+.github/copilot-instructions.md).github/ with instructions/, prompts/, and chatmodes/ directoriesenterprise/ folders (if using enterprise tier)repository/main.instructions.md{Language}/ foldersprompts/ and chatmodes/ foldersNote: Organization and enterprise files will be automatically synchronized when implemented, so manual creation is typically not necessary.
+When processing files in repositories using this architecture, AI agents should:
+Repository maintainers should understand:
+Enterprise administrators implementing the enterprise tier should:
+All instruction files must follow this format:
+---
+applyTo: "<glob pattern targeting specific file types>"
+description: "Brief, actionable description of the instruction's purpose"
+---
+Content structure: Context lead, Goal, Execution steps, Behavior rules, Output format, Error handling, Definitions
+Prompt files should follow established GitHub Copilot prompt conventions with clear context and expected outcomes, including tier identification for +provenance tracking.
+Chat mode files should define conversation contexts, specialized behaviors, and interaction patterns following GitHub Copilot chat mode +specifications, with tier identification for configuration management.
+This architecture is guided by the following principles:
+0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function B(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o This is a test blog post. This is a test blog post. We empower PowerShell-savvy developers to effortlessly transform their ideas into impactful solutions.
Our approach centers around a development framework that allows developers to focus on delivering value through their code.
-By leveraging the GitHub platform and PowerShell, we aim to automate the repetitive tasks, enabling developers — whether as consumers or contributors
- — to concentrate on coding without distractions.
-
-## Supported Platforms
-
-This development framework is built to serve the needs of modern developers and environments. We prioritize supporting the latest Long-Term Servicing
-(LTS) version of PowerShell to ensure that we can leverage the most recent features and capabilities, keeping our framework aligned with the demands
+By leveraging the GitHub platform and PowerShell, we aim to automate the repetitive tasks, enabling developers — whether as consumers or contributors
+ — to concentrate on coding without distractions. This development framework is built to serve the needs of modern developers and environments. We prioritize supporting the latest Long-Term Servicing
+(LTS) version of PowerShell to ensure that we can leverage the most recent features and capabilities, keeping our framework aligned with the demands
of today’s development landscape. We assume most of the users of this framework work on modern platforms and have access to the latest versions of
-PowerShell or seek to use it to develop solutions intended to run on modern systems, like GitHub Actions, Azure Functions on a developer machine.
-
-### The Trade-Off: Not Supporting Windows PowerShell
-
-We’ve made a deliberate choice not to actively persure to support the older Windows PowerShell (5.1) version, as it limits our ability to use the
+PowerShell or seek to use it to develop solutions intended to run on modern systems, like GitHub Actions, Azure Functions on a developer machine. We’ve made a deliberate choice not to actively persure to support the older Windows PowerShell (5.1) version, as it limits our ability to use the
newest PowerShell features. Where its low effort to support Windows PowerShell, we will do so, but we will not actively develop modules for it.
While we recognize that some users may still rely on Windows PowerShell 5.1, they can run tools developed in this framework by installing
PowerShell 7 alongside it or on remote systems. This decision ensures that this framework can focus on delivering new features for modern development
without being constrained by legacy technology, which would otherwize require significant effort to develop and maintain, even if it is available in
-the newer versions of PowerShell.
-
-## Products and projects we focus on
-
-Our framework is dedicated to advancing the tools and processes that empower modern development and operations teams, with a specific focus on GitHub
-as our primary toolstack. We concentrate on the following key areas:
-
-- PowerShell modules
-- GitHub Actions and Workflows
-- Serverless applications using Function Apps in Azure
-
-### PowerShell modules
-
+the newer versions of PowerShell. Our framework is dedicated to advancing the tools and processes that empower modern development and operations teams, with a specific focus on GitHub
+as our primary toolstack. We concentrate on the following key areas: We empower PowerShell-savvy developers to effortlessly transform their ideas into impactful solutions. Our approach centers around a development framework that allows developers to focus on delivering value through their code. By leveraging the GitHub platform and PowerShell, we aim to automate the repetitive tasks, enabling developers \u2014 whether as consumers or contributors \u2014 to concentrate on coding without distractions. This development framework is built to serve the needs of modern developers and environments. We prioritize supporting the latest Long-Term Servicing (LTS) version of PowerShell to ensure that we can leverage the most recent features and capabilities, keeping our framework aligned with the demands of today\u2019s development landscape. We assume most of the users of this framework work on modern platforms and have access to the latest versions of PowerShell or seek to use it to develop solutions intended to run on modern systems, like GitHub Actions, Azure Functions on a developer machine. We\u2019ve made a deliberate choice not to actively persure to support the older Windows PowerShell (5.1) version, as it limits our ability to use the newest PowerShell features. Where its low effort to support Windows PowerShell, we will do so, but we will not actively develop modules for it. While we recognize that some users may still rely on Windows PowerShell 5.1, they can run tools developed in this framework by installing PowerShell 7 alongside it or on remote systems. This decision ensures that this framework can focus on delivering new features for modern development without being constrained by legacy technology, which would otherwize require significant effort to develop and maintain, even if it is available in the newer versions of PowerShell. Our framework is dedicated to advancing the tools and processes that empower modern development and operations teams, with a specific focus on GitHub as our primary toolstack. We concentrate on the following key areas: We are PSModule :) Welcome to the PSModule blog! Here you'll find the latest news, updates, and insights related to PowerShell + GitHub development. This is a test blog post. Welcome to the PSModule Dictionary - a comprehensive glossary of terms, concepts, and technologies used throughout our projects and documentation. Common terms you might encounter: - API - Application Programming Interface - Azure - Microsoft's cloud platform - CI/CD - Continuous Integration/Continuous Deployment - Cmdlet - PowerShell command - Git - Version control system - GitHub - Code hosting platform - LTS - Long-Term Servicing - MkDocs - Documentation generator - Module - PowerShell package - Pipeline - Automated process chain - PowerShell - Task automation framework - Repository - Code storage location - Workflow - Automated process series This dictionary serves as a reference for developers, contributors, and users to understand the terminology and concepts used in PSModule projects. Each entry includes clear definitions, usage examples, and related links where applicable. Application Programming Interface (API) - A set of protocols, routines, and tools for building software applications. APIs specify how software components should interact and are used when programming graphical user interface (GUI) components. Example: The GitHub API allows developers to interact with GitHub repositories, issues, and pull requests programmatically. Microsoft's cloud computing platform that provides a wide range of cloud services, including compute, analytics, storage, and networking. Related: Azure Functions, Azure DevOps A set of development tools and services from Microsoft for software development teams, including version control, build automation, and project management. A serverless compute service that lets you run event-triggered code without having to explicitly provision or manage infrastructure. In version control systems like Git, a branch is a parallel version of a repository that diverges from the main working project. Example: Feature branches are used to develop new features in isolation before merging back to the main branch. An automated process that compiles, tests, and packages source code into deployable artifacts. Continuous Integration/Continuous Deployment (CI/CD) - A software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run. A lightweight PowerShell command that follows the verb-noun naming convention and is designed to perform a specific function. Example: A lightweight, standalone, executable package that includes everything needed to run an application: code, runtime, system tools, libraries, and settings. A set of practices that combines software development (Dev) and IT operations (Ops) to shorten the systems development life cycle and provide continuous delivery. A platform for developing, shipping, and running applications using containerization technology. A distributed version control system for tracking changes in source code during software development. A web-based platform for version control and collaboration that lets you and others work together on projects from anywhere. GitHub's built-in CI/CD platform that allows you to automate your build, test, and deployment pipeline. Example: Automatically running tests when a pull request is created. Long-Term Servicing (LTS). For more info visit: PowerShell Support Lifecycle A lightweight markup language with plain text formatting syntax, designed to be converted to HTML and many other formats. A fast, simple static site generator that's geared towards building project documentation using Markdown files. In PowerShell, a package that contains PowerShell members, such as cmdlets, providers, functions, workflows, variables, and aliases. A series of automated processes that allow developers and DevOps professionals to reliably and efficiently compile, build, and deploy their code. A task automation and configuration management framework from Microsoft, consisting of a command-line shell and the associated scripting language. Pull Request (PR) - A method of submitting contributions to a software project where changes are proposed and reviewed before being merged into the main codebase. Repository (Repo) - A storage location for software packages, often used in version control systems to store project files and their revision history. An architectural style for designing web services that uses HTTP requests to GET, PUT, POST, and DELETE data. Semantic Versioning (SemVer) - A versioning scheme that uses a three-part version number: MAJOR.MINOR.PATCH, where each part is incremented based on the type of changes made. Example: Version 1.2.3 where 1 is major, 2 is minor, and 3 is patch. A tool that generates a full static HTML website based on raw data and a set of templates. A pre-designed format or structure that can be used as a starting point for creating new files, projects, or configurations. The process of evaluating and verifying that a software application or system meets specified requirements and functions correctly. A system that records changes to a file or set of files over time so that you can recall specific versions later. An isolated environment that allows you to install packages and dependencies without affecting the global system installation. A series of automated steps or processes that execute in response to specific events or triggers. Example: A GitHub Actions workflow that runs tests every time code is pushed to a repository. YAML Ain't Markup Language (YAML) - A human-readable data serialization standard commonly used for configuration files and data exchange. Example: GitHub Actions workflows are defined using YAML files. Contributing to the Dictionary Found a term that should be added or need to update an existing definition? Please create an issue or submit a pull request with your suggestions. Search Functionality Use the search feature in the top navigation to quickly find specific terms and their definitions across the entire documentation site. Action parameters: For nested actions we should be using unique names for the github action. The names of the action should be something like _INPUT"},{"location":"GitHub-Actions/Some-More/","title":"Some more","text":""},{"location":"GitHub-Actions/Test-Something/","title":"Test something","text":""},{"location":"GitHub-Actions/Subtopic/","title":"Subtopic","text":""},{"location":"GitHub-Actions/Subtopic/Some-More/","title":"Some more","text":""},{"location":"GitHub-Actions/Subtopic/Test-Something/","title":"Test something","text":""},{"location":"PowerShell-Modules/","title":"PowerShell","text":" qweqwe This document defines the structure and guidelines for writing Pester tests for PowerShell functions. The goal is to ensure consistency and comprehensive test coverage while maintaining clarity. Each function is tested within a structured Pester This ensures our tests are structured, maintainable, and adhere to best practices. This document defines how changes to a PowerShell module\u2019s public interface determine updates to its version number under Semantic Versioning (SemVer). Semantic Versioning uses a three-part version format: MAJOR.MINOR.PATCH, where each part is incremented based on the nature of changes: - MAJOR version is incremented for incompatible API changes (breaking changes) (Semantic Versioning 2.0.0 | Semantic Versioning). - MINOR version is incremented for added functionality that is backward compatible (new features) (Semantic Versioning 2.0.0 | Semantic Versioning). - PATCH version is incremented for backward-compatible bug fixes or minor improvements (Semantic Versioning 2.0.0 | Semantic Versioning). In the context of a PowerShell module, the \u201cpublic API\u201d consists of all exported functions/cmdlets, public variables, classes, and enums that consumers of the module can use. Changes to these exported elements will dictate whether the version bump is major, minor, or patch. Internal changes that do not affect the exported interface are generally not reflected in the version. The following sections categorize changes and the required version update level, ensuring a consistent and predictable versioning strategy. A major version bump signifies a breaking change in the module\u2019s public interface. Any modification that could cause existing scripts or code relying on the module to fail or change behavior in an incompatible way requires incrementing the MAJOR version. These include: Removal or Renaming of Exported Commands or Elements: Removing an exported function/cmdlet, variable, class, or enum, or renaming any of these, is a breaking change. Consumers referencing the old name will encounter errors because the item no longer exists or has a different name. (Example: Changes to Function Signatures: Modifying the signature of an exported function or cmdlet in a non-backward-compatible way triggers a major bump. This includes: Example: An exported function Example: An exported class Example: An exported enum Rationale: According to Semantic Versioning, introducing changes that are not backward compatible requires a major version increment (Semantic Versioning 2.0.0 | Semantic Versioning). By increasing the major version, we communicate to users that they may need to adjust their scripts due to breaking changes. This aligns with the principle that \u201cMAJOR version when you make incompatible API changes\u201d (Semantic Versioning 2.0.0 | Semantic Versioning). For example, if a function or parameter that existed in version 1.x is no longer present in version 2.0, that is an incompatible API change. Our versioning policy follows this rule strictly: breaking changes will never be introduced in a minor or patch release, ensuring that patch and minor updates can be safely adopted without fear of script-breaking surprises. A minor version bump is used for new features and additions that are backward compatible with the existing public API. These changes enhance the module\u2019s functionality without breaking any existing usage. In other words, existing scripts will continue to work as before, and new capabilities are introduced. Changes that trigger a MINOR version increase include: Adding New Exported Functions/Cmdlets: Introducing a new function or cmdlet to the module is a backward-compatible addition. Since it does not remove or change existing functions, nothing breaks; users simply have an additional function available. Example: Adding a new cmdlet Adding New Parameters to Existing Functions: If you extend an existing function\u2019s capabilities by adding a new parameter in a way that does not break existing calls, it is a minor change. The key here is that the new parameter must be optional or have a default value such that any existing calls (which don\u2019t pass this parameter) still work exactly as before. In semantic versioning terms, this is adding functionality in a backwards-compatible manner (semantic versioning - Does adding a parameter to a function definition require a new major version? - Stack Overflow). Important: If a new parameter is added as required (with no default), that breaks existing calls (which would now be missing a required argument), and thus would be a breaking change requiring a major bump (semantic versioning - Does adding a parameter to a function definition require a new major version? - Stack Overflow). So, new parameters must be introduced in a backward-compatible way (optional or with defaults) to qualify as a minor version update. Adding New Exported Variables: If the module begins to export a new public variable (for example, a new preference variable or a constant) that wasn\u2019t present before, it\u2019s an additive change. Since no existing variable is removed or changed, existing scripts are unaffected (they simply might not use or know about the new variable). This constitutes a minor version increment. Example: Adding a new Adding New Classes or Members: Introducing a new public class (exported from the module) or adding new members to an existing exported class in a non-breaking way is a minor change: Adding a new method or property to an existing exported class can be considered backward compatible as long as it doesn\u2019t conflict with existing members. Existing scripts constructing or using the class will continue to work as before. (One caveat: if consumers have derived from this class, adding new abstract members would be breaking, but assuming typical usage where classes are used as-is, new members are just additional features.) Example: A class Adding New Enum Values or New Enums: If the module introduces a new enumeration type, or adds additional members to an existing enum, it\u2019s generally treated as a backward-compatible addition: New Value in Existing Enum: Adding a value to an existing exported enum can be viewed as a new feature. Code that doesn\u2019t know about the new value isn\u2019t forced to use it. (Existing switch statements or logic that enumerate enum values may not account for it, but they won\u2019t immediately break at runtime; however, developers should update their code to handle the new case if appropriate. Since it doesn\u2019t outright break compilation or invocation in PowerShell, it\u2019s considered backward compatible in this context.) Example: The enum Non-Breaking Changes to Existing Features: In some cases, a change might alter behavior but still be backward compatible. For instance, making an existing parameter accept a new type of input in addition to existing types (broadening what is accepted) could be considered a new capability that doesn\u2019t break old usage. Such changes can fall under minor version if they extend functionality without removal or contradiction of the old behavior. (However, caution is advised: changing behavior can sometimes surprise users. If in doubt, treat as major if it might disrupt assumptions.) In summary, any new functionality that does not force existing users to change their usage is a candidate for a minor version increment (Semantic Versioning 2.0.0 | Semantic Versioning). Minor releases accumulate enhancements and new features, signalling to users that new capabilities are available, but all existing scripts should continue to work as they did in the previous version. Users can upgrade to the new minor version and gain new functions or options without needing to modify their existing code. This aligns with the SemVer guideline that \u201cMINOR version [increments] when you add functionality in a backward compatible manner\u201d (Semantic Versioning 2.0.0 | Semantic Versioning). A patch version bump is used for changes that do not affect the module\u2019s public API or add new features, but rather fix issues or improve internal implementation. Patch updates are meant to be safe, drop-in updates for users, with no risk of breaking functionality or changing how features are used. Scenarios for a PATCH version increment include: Resolving a minor issue where an enum value wasn\u2019t handled in an internal function (assuming no public API change). As long as the outward-facing contract remains the same (same function name, parameters, outputs), these are patch changes. Consumers might notice the bug is resolved, but they do not need to change their code \u2013 they just get the benefit of the fix. Performance Improvements: Optimizations that improve the performance or efficiency of the module without affecting the external behavior or API. For instance, rewriting an algorithm inside a function to run faster or use less memory, but with the same input/output interface and results, qualifies as a patch. Users\u2019 experience may improve (faster execution), but they don\u2019t need to change anything in their usage. This is a non-breaking internal improvement. Refactoring and Internal Cleanup: Changes to the internal code structure, organization, or quality that do not change any aspect of the public interface or observable behavior fall under patch (or possibly no version change at all \u2013 see the next section). If you release a new version that purely refactors code (improves maintainability, updates comments, reorganizes module files) and the module\u2019s exported functions and behavior remain identical, it can be considered a patch update. From the user\u2019s perspective, nothing changed functionally, so there\u2019s no new feature (hence not a minor) and no break (hence not a major). Releasing it as a patch version indicates it\u2019s a minor improvement or maintenance release. Documentation or Metadata Updates: If you publish a new version to update documentation included in the module (e.g., help content) or to adjust module metadata (like author info, tags, etc.) without any code change affecting functionality, this would be a patch version increment. (However, often documentation changes alone might not necessitate a new release; if they do, patch is appropriate since the API is unchanged.) Note: A patch release should not introduce any new public surface area or change the meaning of anything in the public API. It is strictly for fixes and invisible improvements. According to SemVer rules, \u201cPATCH version when you make backwards-compatible bug fixes\u201d (Semantic Versioning 2.0.0 | Semantic Versioning) \u2013 this includes fixes and minor tweaks that do not affect compatibility. Users upgrading from one patch version to the next within the same minor series (e.g., 1.2.3 to 1.2.4) should notice no differences except the resolved issues or performance gains. They do not get new features (and thus don\u2019t need to learn anything new), and they do not have to worry about breaks. Certain changes do not require any version number increase at all, because they have no effect on the module\u2019s outward-facing behavior or interface. In a disciplined development practice, if the only changes in a commit or release are purely internal and produce no difference in functionality or API, the version can remain the same. In practice, such changes are often bundled with other changes or released as patch versions if needed. But as a guideline, metadata or refactoring changes that do not impact the exported interface should not influence the version number (they are essentially \u201cno-ops\u201d as far as the user is concerned). Examples: Refactoring without Behavioral Changes: If the code is refactored (e.g., splitting a large function into smaller private helper functions, renaming internal variables, improving readability) but the exported functions, classes, and variables all behave exactly the same and have the same signatures, then there\u2019s no need for a version change. The module behaves identically from the consumer\u2019s perspective. Build System or Test Changes: Updates to the module\u2019s build scripts, continuous integration configuration, or test suite do not require a version bump. These are changes for the developers/maintainers and do not ship to the user in a way that affects usage. Metadata Updates: Changing non-functional metadata such as author name, project URL, licensing info, etc., in the module manifest (PSD1) doesn\u2019t affect how the module is used at runtime. Such changes alone don\u2019t merit a version increment. Formatting and Comments: Modifying code formatting, comments, or other non-executable parts of the code has no effect on functionality. No version change is needed for these kinds of modifications alone. No-Op Rebuilds: In some cases, a module might be rebuilt or repackaged without any code changes (for example, re-signing the module or packaging it differently). If the contents of the module\u2019s public API and behavior are unchanged, the version number should ideally remain the same. (If a rebuild must be published, one might use the same version or a patch if required by tooling, but from a semantic standpoint, nothing changed.) In summary, if a change does not modify or add to the public interface and does not fix a user-facing bug, it should not cause any visible version change. The automated versioning scripts or maintainers should ignore such changes when determining how to bump the version. Essentially, purely internal changes = no bump (or at most a patch if a release is needed for some reason). This ensures the version number reflects meaningful changes that users care about. (Note: In practice, every release must have a unique version. So if you are releasing changes that have no API impact, you might still increment the patch to publish it. But the key is that those internal changes by themselves never escalate the version beyond patch, and if they are truly no-ops, you might choose not to release until there\u2019s a user-facing change.) This module follows a \u201clatest version\u201d support strategy, meaning that only the most recent release is fully supported and maintained. When a new version is released, it supersedes previous versions. Older versions are not maintained, and users are expected to upgrade to the latest version to receive fixes and new features. As stated in Microsoft\u2019s guidance for PowerShell modules: \u201cOnly the latest major version receives full support, including new features, bug fixes, and updates. We strongly recommend upgrading to the latest version\u2026\u201d (Versioning, release cadence, and breaking changes - Microsoft Entra PowerShell | Microsoft Learn). In our context, this means: We do not create maintenance releases for older major versions. For example, if the module is currently at 2.x, we will not typically release further updates for 1.x; any fixes or enhancements will go into a new 2.x (or later) release. The focus is on moving forward with the latest version of the module. Breaking changes will be introduced only with a major version bump, and when we do increment the major version, users should plan to update their scripts to accommodate those changes. Since older majors won\u2019t get back-ported fixes, upgrading is important to stay supported. Minor and patch releases are intended to be safe to adopt (no breaking changes). Users should feel confident updating to a new minor version within the same major series to get new features, and applying patch updates for bug fixes. Given that we don\u2019t maintain parallel old versions, applying these updates is the primary way to get issues resolved. Semantic versioning in this module serves as a contract with users: by looking at how the version changed, users can tell what to expect: By adhering to this strategy, we ensure clarity and consistency. Users who always upgrade to the latest version will benefit from all improvements and will only need to make script changes when a major version increments (which will be clearly indicated by the version number change). To enforce the above rules, we will use custom PowerShell scripts as part of our build/release process to automatically determine the appropriate version bump based on the changes in the module. The automation will compare the module\u2019s exported interface between the current release and the new version under development: - It will detect additions of public elements (functions, parameters, variables, classes, enum values) and detect removals or changes to public elements. - Based on this comparison, the script will decide the version increment: - If new public functions, new optional parameters, or other new exported members are found (and no breaking changes), the script will set the version bump to Minor (since new functionality has been added in a backwards-compatible way). - If any exported function/variable/class/enum from the previous version is missing in the new version, or a function\u2019s signature has changed incompatibly, etc., the script will flag a Major bump (since a breaking change was detected). - If no differences in the public API are found (meaning no new features and no removed/changed features), then the changes must be purely fixes or internal improvements. In this case, the script will default to a Patch bump (PowerShell: Automatic Module Semantic Versioning). This approach mirrors the \u201cfingerprint\u201d strategy: generating a list (fingerprint) of all public API elements (e.g., Using automation ensures that our versioning rules are applied consistently on every release. However, we will also manually review changes for any subtleties that automation might miss. For example, a change in behavior that is technically backward-compatible in the API surface might still be communicated as a bigger change if it could impact users (the automation might view it as no API change, but maintainers might still choose to bump minor for a significant new behavior or even major if a fix alters expected outcomes in rare cases). The tooling serves as a baseline, and maintainers can override or augment the decision if necessary (but always adhering to the rule that breaking changes cannot be released under a non-major bump). Example of the automated logic in practice: Suppose in version 1.3.0 the module has a function If instead we had removed If we only fixed a bug inside This specification provides a clear framework for versioning a PowerShell module in accordance with Semantic Versioning principles, tailored to the specific elements of a PowerShell module\u2019s public interface. By classifying changes into major, minor, or patch categories, we ensure that the module\u2019s version number accurately communicates the impact of changes: - Major versions for breaking changes (removals, renames, incompatible alterations). - Minor versions for new features and additions that are backward compatible. - Patch versions for bug fixes and non-breaking improvements. Developers maintaining the module can use these guidelines to decide the appropriate version number for each release. Automated scripts will assist in detecting the scope of changes, but sound judgment will be applied in edge cases. Users of the module can rely on the version number to understand the significance of an update. Ultimately, this practice enables a predictable upgrade path where users only need to be concerned about potential breaking changes when the major version increases, and are otherwise free to take minor and patch updates confidently. By adhering to this specification, we uphold a contract of compatibility and improvement with our users, making module releases transparent and manageable in the long run. qweqwe This specification documents a scalable GitHub Copilot customization architecture designed to provide consistent guidance, prompts, and chat modes across multiple repositories in community organizations and enterprises.The architecture addresses the challenge of managing GitHub Copilot configurations at scale by implementing a multi-tier approach that balances centralized governance with project-specific flexibility. This system enables organizations to: The architecture replaces GitHub Copilot's single-file approach with a structured three-tier system that manages instructions, prompts, and chat modes through a hierarchical precedence model. Modern software organizations require a structured system for managing GitHub Copilot configuration files that enables AI agents to make consistent changes across multiple repositories while allowing for project-specific customization. Due to the absence of native organization-wide configuration support in GitHub that provides a single location for common Copilot configurations, this architecture implements a scalable multi-tier approach for managing: This architecture serves multiple organizational contexts: - Enterprises: Large organizations needing centralized AI assistance standards across teams and projects - Enterprise Adoption: Enterprises adopting community frameworks while maintaining their own customizations - Multi-Division Enterprises: Large organizations with division-specific requirements within enterprise standards - Community Organizations: Open source projects and community frameworks requiring consistent standards across repositories Each Copilot configuration type follows a flexible three-tier management approach: This design allows organizations to: - Enforce enterprise-wide governance and compliance requirements - Adopt community standards and frameworks as a foundation - Allow repository-level customization within enterprise and organizational constraints The file The multi-tier Copilot files can be automatically synchronized from different sources: Enterprise Tier Synchronization: - Source: Enterprise's central configuration repository - Target: Enterprise repositories (optional, based on enterprise policy) - Content: Enterprise-specific customizations, compliance requirements, security patterns Organization Tier Synchronization: - Source: Community framework or organization's base repository - Target: All repositories adopting the framework - Content: Universal patterns and base standards Repository Tier Management: - Source: Local repository maintenance - Target: Current repository only - Content: Project-specific overrides and customizations The synchronization process applies to all Copilot configuration types: - Updates: Files under The For instructions, context-specific files may include: - File extension patterns: Instructions are evaluated and applied in hierarchical order, with more specific instructions taking precedence: For prompts and chat modes, the precedence follows the three-tier approach: When multiple tiers have the same prompt/chat mode, the enterprise tier takes highest precedence, followed by organization tier, then repository tier. Organizations can choose to implement: - Two-tier: Organization + Repository (skip enterprise tier) - Three-tier: Organization + Enterprise + Repository (full implementation) - Enterprise-only: Enterprise + Repository (for enterprises with internal frameworks) Repositories transitioning from legacy approaches should: Note: Organization and enterprise files will be automatically synchronized when implemented, so manual creation is typically not necessary. When processing files in repositories using this architecture, AI agents should: Repository maintainers should understand: Enterprise administrators implementing the enterprise tier should: All instruction files must follow this format: Content structure: Context lead, Goal, Execution steps, Behavior rules, Output format, Error handling, Definitions Prompt files should follow established GitHub Copilot prompt conventions with clear context and expected outcomes, including tier identification for provenance tracking. Chat mode files should define conversation contexts, specialized behaviors, and interaction patterns following GitHub Copilot chat mode specifications, with tier identification for configuration management. This architecture is guided by the following principles:=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/min/lunr.he.min.js b/assets/javascripts/lunr/min/lunr.he.min.js
new file mode 100644
index 0000000..b863d3e
--- /dev/null
+++ b/assets/javascripts/lunr/min/lunr.he.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.he=function(){this.pipeline.reset(),this.pipeline.add(e.he.trimmer,e.he.stopWordFilter,e.he.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.he.stemmer))},e.he.wordCharacters="֑-״א-תa-zA-Za-zA-Z0-90-9",e.he.trimmer=e.trimmerSupport.generateTrimmer(e.he.wordCharacters),e.Pipeline.registerFunction(e.he.trimmer,"trimmer-he"),e.he.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ה ו י ת",pre2:"ב כ ל מ ש כש",pre3:"הב הכ הל המ הש בש לכ",pre4:"וב וכ ול ומ וש",pre5:"מה שה כל",pre6:"מב מכ מל ממ מש",pre7:"בה בו בי בת כה כו כי כת לה לו לי לת",pre8:"ובה ובו ובי ובת וכה וכו וכי וכת ולה ולו ולי ולת"},e.suf={suf1:"ך כ ם ן נ",suf2:"ים ות וך וכ ום ון ונ הם הן יכ יך ינ ים",suf3:"תי תך תכ תם תן תנ",suf4:"ותי ותך ותכ ותם ותן ותנ",suf5:"נו כם כן הם הן",suf6:"ונו וכם וכן והם והן",suf7:"תכם תכן תנו תהם תהן",suf8:"הוא היא הם הן אני אתה את אנו אתם אתן",suf9:"ני נו כי כו כם כן תי תך תכ תם תן",suf10:"י ך כ ם ן נ ת"},e.patterns=JSON.parse('{"hebrewPatterns": [{"pt1": [{"c": "ה", "l": 0}]}, {"pt2": [{"c": "ו", "l": 0}]}, {"pt3": [{"c": "י", "l": 0}]}, {"pt4": [{"c": "ת", "l": 0}]}, {"pt5": [{"c": "מ", "l": 0}]}, {"pt6": [{"c": "ל", "l": 0}]}, {"pt7": [{"c": "ב", "l": 0}]}, {"pt8": [{"c": "כ", "l": 0}]}, {"pt9": [{"c": "ש", "l": 0}]}, {"pt10": [{"c": "כש", "l": 0}]}, {"pt11": [{"c": "בה", "l": 0}]}, {"pt12": [{"c": "וב", "l": 0}]}, {"pt13": [{"c": "וכ", "l": 0}]}, {"pt14": [{"c": "ול", "l": 0}]}, {"pt15": [{"c": "ומ", "l": 0}]}, {"pt16": [{"c": "וש", "l": 0}]}, {"pt17": [{"c": "הב", "l": 0}]}, {"pt18": [{"c": "הכ", "l": 0}]}, {"pt19": [{"c": "הל", "l": 0}]}, {"pt20": [{"c": "המ", "l": 0}]}, {"pt21": [{"c": "הש", "l": 0}]}, {"pt22": [{"c": "מה", "l": 0}]}, {"pt23": [{"c": "שה", "l": 0}]}, {"pt24": [{"c": "כל", "l": 0}]}]}'),e.execArray=["cleanWord","removeDiacritics","removeStopWords","normalizeHebrewCharacters"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r
=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/min/lunr.pt.min.js b/assets/javascripts/lunr/min/lunr.pt.min.js
new file mode 100644
index 0000000..6c16996
--- /dev/null
+++ b/assets/javascripts/lunr/min/lunr.pt.min.js
@@ -0,0 +1,18 @@
+/*!
+ * Lunr languages, `Portuguese` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/min/lunr.ro.min.js b/assets/javascripts/lunr/min/lunr.ro.min.js
new file mode 100644
index 0000000..7277140
--- /dev/null
+++ b/assets/javascripts/lunr/min/lunr.ro.min.js
@@ -0,0 +1,18 @@
+/*!
+ * Lunr languages, `Romanian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+
+!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;uTest blog post
\nTest blog post
\n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A GitHub & PowerShell development framework#
+Supported Platforms#
+The Trade-Off: Not Supporting Windows PowerShell#
+Products and projects we focus on#
+
+
+PowerShell modules#
About
@@ -101,6 +1728,22 @@
+
+
Anthropic
+ A PowerShell module for interacting with Anthropic APIs
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ast
A PowerShell module for using the Abstract Syntax Tree (AST) to analyze any PowerShell code.
@@ -181,6 +1824,22 @@
+
Claude
+ A PowerShell module for interacting with Claude API
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Confluence
A PowerShell module that interacts with Atlassian Confluence
@@ -213,6 +1872,22 @@
+
Context7
+ A PowerShell module that interacts with Context7
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DateTime
A PowerShell module to work with DateTime objects.
@@ -261,6 +1936,38 @@
+
+ Dns
+ A PowerShell module for managing DNS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Domeneshop
+ A PowerShell module for interacting with the Domeneshop APIs
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DynamicParams
A PowerShell module that makes it easier to use dynamic params.
@@ -293,6 +2000,22 @@
+
Gemini
+ A PowerShell module for interacting with the Gemini API
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GitHub
A PowerShell module to interact with GitHub, both interactively and via automation.
@@ -405,6 +2128,22 @@
+
IPv6
+ A PowerShell module to manage IPv6 networking
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Json
A PowerShell module for typical Json related tasks.
@@ -501,6 +2240,22 @@
+
Net
+ A PowerShell module to bring network functions to PowerShell
+
+
+
+
+
+
+
+
+
+
+
+
+
- Object
A PowerShell module that manages Objects in PowerShell.
@@ -661,22 +2416,6 @@
-
Run
- A PowerShell module to manage native commands
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sodium
A PowerShell module for handling Sodium encrypted secrets.
@@ -827,8 +2566,7 @@
-### PowerShell based Azure Function Apps
-
+ PowerShell based Azure Function Apps#
About
@@ -898,8 +2636,7 @@
PowerShell based GitHub Actions (composite action)#
About
@@ -911,7 +2648,7 @@
How we do it in PSModule
-Projects are based on the `Template-Action` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying PowerShell based Azure Function Apps to Azure. This includes workflows for building, testing, and deploying the function app, as well as a configuration file for setting up the function app's metadata and dependencies.
+Projects based on the `Template-Action` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying PowerShell based Azure Function Apps to Azure. This includes workflows for building, testing, and deploying the function app, as well as a configuration file for setting up the function app's metadata and dependencies.
Using custom properties we set `RepoType` to `FunctionApp`.
We use branch policies to control the flow of changes to the `main` branch, and we use labels to control the versioning of the module when a pull request is merged.
@@ -924,7 +2661,6 @@
-
Auto‑Configure
-
- Autmates the configuration of a GitHub repo
-
-
-
-
-
-
-
-
-
-
-
- Auto‑Document
@@ -966,21 +2687,6 @@
-
Auto‑Release
-
- Automatically creates releases based on pull requests and labels.
-
-
-
-
-
-
-
-
-
-
-
+ Build‑PSModule
@@ -1086,6 +2792,21 @@
+
Get‑PSModuleSettings
+
+ A GitHub Action that is used to gather settings from the PSModule.yml file and calculates conditions from the run.
+
+
+
+
+
+
+
+
+
+
+
+ GitHub‑Script
@@ -1191,6 +2912,21 @@
+
Release‑GHRepository
+
+ Automatically creates releases based on pull requests and labels.
+
+
+
+
+
+
+
+
+
+
+
Test‑PSModule
@@ -1212,20 +2948,19 @@
-### Reusable workflows
-
+ Reusable workflows#
About
Reusable workflows are a way to define a workflow in one repository and use it in multiple repositories. They can be used to automate common tasks, such as building, testing, and deploying code, and they can help to streamline the development process by providing a consistent way to perform these tasks across multiple repositories.
-We have created a framework that automates the process of creating, testing, and deploying reusable workflows in a organization. This framework is designed to make it easy for developers to create and share their workflows with the community.
+We have created a framework that automates the process of creating, testing, and deploying reusable workflows in an organization. This framework is designed to make it easy for developers to create and share their workflows with the community.
How we do it in PSModule
-Projects are based on the `Template-Workflow` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying reusable workflows in a organization. This includes workflows for building, testing, and deploying the workflows, as well as a configuration file for setting up the workflows metadata and dependencies.
+Projects based on the `Template-Workflow` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying reusable workflows in an organization. This includes workflows for building, testing, and deploying the workflows, as well as a configuration file for setting up the workflow's metadata and dependencies.
Using custom properties we set `RepoType` to `Workflow`.
We use branch policies to control the flow of changes to the `main` branch, and we use labels to control the versioning of the module when a pull request is merged.
@@ -1269,3 +3004,257 @@
=m[t]&&t{{ lang.t("meta.comments") }}
-
-
-
-
-{% endif %}
diff --git a/search/search_index.json b/search/search_index.json
new file mode 100644
index 0000000..01e39d7
--- /dev/null
+++ b/search/search_index.json
@@ -0,0 +1 @@
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"A GitHub & PowerShell development framework","text":"
"},{"location":"#powershell-modules","title":"PowerShell modules","text":"About A PowerShell module is a set of functions, scripts, and cmdlets that are bundled together in a single package. Modules are used to organize and distribute code in a way that is easy to use and share. They can be used to extend the functionality of PowerShell, automate tasks, and create reusable code that can be shared with others. We have created a framework that automates the process of creating, testing, and publishing PowerShell modules to the PowerShell Gallery. This framework is designed to make it easy for developers to create and share their PowerShell modules with the community. How we do it in PSModule Projects based on the `Template-PSModule` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and publishing PowerShell modules to the PowerShell Gallery. This includes workflows for building, testing, and releasing the module, as well as a configuration file for setting up the module's metadata and dependencies. Using custom properties we set `RepoType` to `Module`. We use branch policies to control the flow of changes to the `main` branch, and we use labels to control the versioning of the module when a pull request is merged. Create a new project 1. [Create a repository based on the template Template-PSModule](https://github.com/new?template_name=Template-PSModule&template_owner=PSModule). The module will by default use the name of the repository. See [Process-PSModule](https://github.com/PSModule/Process-PSModule) for more info on choosing another name than the repository name. 1. Create a repository or organization secret called `APIKEY` holding the API key for the PowerShell Gallery. 1. Configure the settings you want for the repository including a branch policy for the `main` branch. 1. On a topic branch: 1. develop the code you want to add to your module. 1. delete the parts you do not need. 1. update the tests in the `tests` folder. 1. Create a PR. Add a label to the PR depending on what you want to do. - `Major` - Will create a major release (vX.0.0) when merged. If specified with \"Prerelease\", a major version will be created using the prerelease tag (vX.0.0-\\). - `Minor` - Will create a minor release (vX.Y.0) when merged. If specified with \"Prerelease\", a minor version will be created using the prerelease tag (vX.Y.0-\\). - `Patch` - Will create a minor release (vX.Y.Z) when merged. If specified with \"Prerelease\", a minor version will be created using the prerelease tag (vX.Y.Z-\\). A patch version bump is the default if nothing is specified for the PR. - `Prerelease` - CI will create a prerelease of the module using the branch name as a prerelease tag in the version. This will create both a repository release and a prerelease version of the module on the PowerShell Gallery. 1. Once the PR is created, the [Process-PSModule](https://github.com/PSModule/Process-PSModule) workflow will trigger. 1. When the PR is merged, a release will be created and the module will be published to the PowerShell Gallery with a stable version based on the version bump indicator the PR was was labeled with. Prerelease tags will be cleaned up on the repository. Modules delivered on the PowerShell Gallery Name Description Version Admin A PowerShell module working with the admin role. Anthropic A PowerShell module for interacting with Anthropic APIs Ast A PowerShell module for using the Abstract Syntax Tree (AST) to analyze any PowerShell code. AzureDevOps A PowerShell module to interact with the Azure DevOps REST API. Base64 A PowerShell module that just handles base64 conversion and validation. Bluesky A PowerShell module to interact with BlueSky CasingStyle A PowerShell module that works with casing of text. Claude A PowerShell module for interacting with Claude API Confluence A PowerShell module that interacts with Atlassian Confluence Context A PowerShell module that manages contexts with secrets and variables. Context7 A PowerShell module that interacts with Context7 DateTime A PowerShell module to work with DateTime objects. DeepSeek A PowerShell module to interact with DeepSeek Discord A PowerShell module to interact with Discord. Dns A PowerShell module for managing DNS Domeneshop A PowerShell module for interacting with the Domeneshop APIs DynamicParams A PowerShell module that makes it easier to use dynamic params. Fonts A PowerShell module for managing fonts. Gemini A PowerShell module for interacting with the Gemini API GitHub A PowerShell module to interact with GitHub, both interactively and via automation. GoogleFonts A PowerShell module to download and install fonts from GoogleFonts. GraphQL A PowerShell module to simplify working with a GraphQL APIs. Guid A PowerShell module that makes working with GUID sligthly more PowerShelly GZip A PowerShell Module that handles GZip archives Hashtable A PowerShell module that simplifies some interaction with Hashtables. IPv4 A PowerShell module for managing IPv4 data IPv6 A PowerShell module to manage IPv6 networking Json A PowerShell module for typical Json related tasks. Jwt A PowerShell module to help work with Json Web Tokens (JWTs) LinkedIn A PowerShell module to programmatically interact with LinkedIn Markdown A PowerShell module to handle markdown MemoryMappedFile A PowerShell module that manages MemoryMappedFile NerdFonts A PowerShell module to download and install fonts from NerdFonts. Net A PowerShell module to bring network functions to PowerShell Object A PowerShell module that manages Objects in PowerShell. OpenAI A PowerShell module for interacting with OpenAI Path A PowerShell module to manage the PATH environment variable on Windows. PowerShellDataFile A PowerShell module for base functions... PowerShellGallery A PowerShell module for interacting with the PowerShell Gallery. PSCredential A Powershell module to manage PSCredentials PSCustomObject A PowerShell module for missing functions of PSCustomObjects. PSSemVer A PowerShell module adding a SemVer compatible class and functions. PublicIP A PowerShell module that helps getting info about your public IP. Retry A PowerShell module to create a retry mechanism around functions Sodium A PowerShell module for handling Sodium encrypted secrets. Telemetry A PowerShell module for managing and registering telemetry. TimeSpan A PowerShell module for working with TimeSpans Tls A module for working with TLS settings. Twitch A PowerShell module for interacting with Twitch. Uri A powershell module that works with URIs (RFC3986) Utilities A PowerShell module with a collection of functions that should have been in PowerShell to start with. WoW A PowerShell module containing utilities for World of Warcraft. Yaml A PowerShell module for working with Yaml."},{"location":"#powershell-based-azure-function-apps","title":"PowerShell based Azure Function Apps","text":"About A PowerShell based Azure Function App is a serverless compute service that enables you to run event-driven code without having to manage the infrastructure. Azure Functions are ideal for processing data, integrating systems, and building simple APIs or microservices. They can be triggered by a variety of events, such as HTTP requests, timers, or messages from Azure services like Azure Storage, Event Grid, or Service Bus. We have created a framework that automates the process of creating, testing, and deploying PowerShell based Azure Function Apps to Azure. This framework is designed to make it easy for developers to create and deploy their Azure Function Apps without having to worry about the underlying infrastructure. How we do it in PSModule Projects based on the `Template-FunctionApp` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying PowerShell based Azure Function Apps to Azure. This includes workflows for building, testing, and deploying the function app, as well as a configuration file for setting up the function app's metadata and dependencies. Using custom properties we set `RepoType` to `FunctionApp`. We use branch policies to control the flow of changes to the `main` branch, and we use labels to control the versioning of the module when a pull request is merged. Create a new project 1. Create a repository based on the template [Template-FunctionApp](https://github.com/PSModule/Template-FunctionApp). The module will by default use the name of the repository. 1. Create a repository or organization secret called `AZURE_CREDENTIALS`, holding the credentials for the Azure service principal. 1. Configure the settings you want for the repository including a branch policy for the `main` branch. 1. On a topic branch: 1. develop the code you want to add to your function app. 1. delete the parts you do not need. 1. update the tests in the `tests` folder. 1. Create a PR. Add a label to the PR depending on what you want to do. - `Major` - Will create a major release (vX.0.0) when merged. If specified with \"Prerelease\", a major version will be created using the prerelease tag (vX.0.0-\\). - `Minor` - Will create a minor release (vX.Y.0) when merged. If specified with \"Prerelease\", a minor version will be created using the prerelease tag (vX.Y.0-\\). - `Patch` - Will create a minor release (vX.Y.Z) when merged. If specified with \"Prerelease\", a minor version will be created using the prerelease tag (vX.Y.Z-\\). A patch version bump is the default if nothing is specified for the PR. - `Prerelease` - CI will create a prerelease of the module using the branch name as a prerelease tag in the version. This will create both a repository release and a prerelease version of the module on the PowerShell Gallery. 1. Once the PR is created, the [Process-FunctionApp](https://github.com/PSModule/Process-FunctionApp) workflow will trigger. 1. When the PR is merged, a release will be created and the function app will be deployed to Azure with a stable version based on the version bump indicator the PR was was labeled with. Prerelease tags will be cleaned up on the repository. Function Apps we maintain Name Description Version GitHubApp A GitHub app running on Azure Function App"},{"location":"#powershell-based-github-actions-composite-action","title":"PowerShell based GitHub Actions (composite action)","text":"About A composite action is a reusable action that is made up of one or more steps. Composite actions can be used to encapsulate common tasks or workflows that can be reused across multiple repositories. They are a great way to share code and best practices with the community, and they can help to streamline the development process by providing a consistent way to perform common tasks. We have created a framework that automates the process of creating, testing, and publishing PowerShell based GitHub Actions to the GitHub Marketplace. This framework is designed to make it easy for developers to create and share their GitHub Actions with the community. How we do it in PSModule Projects based on the `Template-Action` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying PowerShell based Azure Function Apps to Azure. This includes workflows for building, testing, and deploying the function app, as well as a configuration file for setting up the function app's metadata and dependencies. Using custom properties we set `RepoType` to `FunctionApp`. We use branch policies to control the flow of changes to the `main` branch, and we use labels to control the versioning of the module when a pull request is merged. Create a new project 1. Create a repository based on the template [Template-Action](https://github.com/PSModule/Template-Action). GitHub Actions on the GitHub Marketplace Name Description Version Auto\u2011Document Automatically creates documentation for actions and workflows Build\u2011PSModule Action that is used to build a PowerShell module and it's manifest Debug Print info from the runner environment to logs Document\u2011PSModule A function that deals with creating module documentation with the PSModule flavor. Download\u2011CIArtifact Downloads an artifact from a CI workflow Get\u2011IssueFormData Get the data from a issue that was generated based on a issue form Get\u2011PesterCodeCoverage A GitHub action for gathering code coverage from a pester test Get\u2011PesterTestResults A GitHub Action that is used to gather testreulst for the PSModule process Get\u2011PSModuleSettings A GitHub Action that is used to gather settings from the PSModule.yml file and calculates conditions from the run. GitHub\u2011Script A GitHub Action used for running a PowerShell Script that uses the GitHub PowerShell module Initialize\u2011PSModule An action that is used to prepare the runner for PSModule framework. Install\u2011PowerShell A GitHub Action that installs a given version of PowerShell Install\u2011PSModuleHelpers A GitHub action that installs the PSModule library Invoke\u2011Pester A Pester-infused GitHub Action Invoke\u2011ScriptAnalyzer A GitHub Action that analyzes your PowerShell code using PSScriptAnalyzer. Publish\u2011PSModule Action that is used to publish a PowerShell module Release\u2011GHRepository Automatically creates releases based on pull requests and labels. Test\u2011PSModule Test PowerShell modules with Pester and PSScriptAnalyzer."},{"location":"#reusable-workflows","title":"Reusable workflows","text":"About Reusable workflows are a way to define a workflow in one repository and use it in multiple repositories. They can be used to automate common tasks, such as building, testing, and deploying code, and they can help to streamline the development process by providing a consistent way to perform these tasks across multiple repositories. We have created a framework that automates the process of creating, testing, and deploying reusable workflows in an organization. This framework is designed to make it easy for developers to create and share their workflows with the community. How we do it in PSModule Projects based on the `Template-Workflow` repository template will automatically have the necessary workflows and configurations set up to automate the process of creating, testing, and deploying reusable workflows in an organization. This includes workflows for building, testing, and deploying the workflows, as well as a configuration file for setting up the workflow's metadata and dependencies. Using custom properties we set `RepoType` to `Workflow`. We use branch policies to control the flow of changes to the `main` branch, and we use labels to control the versioning of the module when a pull request is merged. Create a new project 1. Create a repository based on the template [Template-Workflow](https://github.com/PSModule/Template-Workflow). Workflows we maintain Name Description Version Process\u2011PSModule Process a module from source code to published module."},{"location":"About/","title":"About us","text":"Get-Process, Set-Location, New-ItemDescribe block that follows this hierarchy:Describe","text":"
"},{"location":"PowerShell-Modules/Test-Specification/#2-function-level-describe","title":"2. Function-Level Describe block corresponds to the module.Describe","text":"
"},{"location":"PowerShell-Modules/Test-Specification/#3-use-case-context","title":"3. Use Case Describe block.Context","text":"
"},{"location":"PowerShell-Modules/Test-Specification/#4-functional-it-statements","title":"4. Functional Context block.Get-Uri - simple usageGet-Uri - Pipeline usageGet-Uri - ParameterSet: DetailedIt Statements","text":"
"},{"location":"PowerShell-Modules/Test-Specification/#5-test-guidelines","title":"5. Test Guidelines","text":"It block tests a specific aspect of the function's behavior.FunctionName - <expected behavior>Get-Uri - gets the URI object when provided a stringGet-Uri - returns $null when input is emptyGet-Uri - throws error on invalid input
"},{"location":"PowerShell-Modules/Test-Specification/#example-test-structure","title":"Example Test Structure","text":"Describe 'Uri' {\n Describe 'Get-Uri' {\n Context 'Get-Uri - simple usage' {\n It 'Get-Uri - gets the URI object when provided a string' {\n $result = Get-Uri -InputString 'https://example.com'\n $result | Should -BeOfType [System.Uri]\n }\n }\n\n Context 'Get-Uri - Pipeline usage' {\n It 'Get-Uri - processes input from the pipeline' {\n $result = 'https://example.com' | Get-Uri\n $result | Should -BeOfType [System.Uri]\n }\n }\n }\n}\n
Get-ItemFoo was exported in the previous version but is removed or renamed to Get-FooItem in the new version. Scripts calling Get-ItemFoo will break.) This kind of change must increment the major version to signal the break.Invoke-ProcessData -Path <string> is changed to Invoke-ProcessData -Uri <string> (parameter renamed) or an existing parameter is removed. Scripts using the old parameter name or expecting that parameter will fail, hence a major version increment is needed.
FileClient had a public property Timeout that is removed or renamed, or a method Connect(string server) is changed to Connect(Uri server). Code instantiating FileClient or calling its methods would break, so the major version must increase.
LogLevel had members Info, Warning, Error. If Warning is removed or renamed to Warn, any script using LogLevel.Warning will break. Such a change mandates a major version bump. (Adding a new enum value is not breaking \u2013 see Minor changes.)
New-Report to the module (where it didn\u2019t exist before) would be a new feature. This warrants a minor version bump because it\u2019s an additive, non-breaking change.-Force switch or an optional -TimeoutSeconds parameter (with a default value) to a function is a minor update. Users can start using the new parameter if they want the new behavior, but all old usages remain valid.$PublicConfig variable that scripts can read is a new feature, bumped in the minor version.Connection gains a new method TestConnection() in version 1.2. Previous scripts using Connection are not affected (they don\u2019t call the new method), but now have the option to use TestConnection. This is a minor feature addition.Color with values Red/Green/Blue) is additive.LogLevel had Info, Warning, Error. If we add Verbose as a new level in a minor release, existing scripts using LogLevel continue to run (they might not handle Verbose if encountered, but nothing crashes by the mere presence of the new value). It\u2019s an additive feature, hence a minor bump.
FunctionName:ParameterName for each parameter of each function, plus entries for other exported members) for the current and previous version, and comparing them (PowerShell: Automatic Module Semantic Versioning) (PowerShell: Automatic Module Semantic Versioning). - If the new fingerprint has entries not present in the old fingerprint, those represent new capabilities (triggering a minor version increase) (PowerShell: Automatic Module Semantic Versioning). - If the old fingerprint has entries not present in the new fingerprint, those represent removed or changed items (triggering a major version increase) (PowerShell: Automatic Module Semantic Versioning). - If neither additions nor removals are detected, only patch-level changes exist (PowerShell: Automatic Module Semantic Versioning).Get-Data -Path <string> and in the development code we change this to Get-Data -Path <string> -Filter <string>, where -Filter is a new optional parameter. The script compares the exported interface: - Old version fingerprint might include an entry like Get-Data:Path for the parameter. - New version fingerprint includes Get-Data:Path and Get-Data:Filter. The new fingerprint has an entry not in the old (Get-Data:Filter), indicating a new parameter. The old fingerprint has none that the new lacks (we didn\u2019t remove anything; Path is still there). So the tool will identify a new feature addition with no removals, resulting in a Minor bump (1.4.0). This matches our expectation: adding an optional -Filter parameter is a backward-compatible enhancement.-Path or renamed Get-Data to Get-ItemData, the old fingerprint would contain entries not in the new, flagging a breaking change. The script would then recommend a Major bump (to 2.0.0), aligning with our policy that such a removal/rename is breaking.Get-Data but made no changes to its parameters or outputs, the fingerprints would be identical. The automation would not find any new or removed public element, and thus default to a Patch bump (1.3.1). This ensures even unseen internal changes result in at least a patch update if a release is made, but nothing more.
.github/copilot-instructions.md is not supported in this architecture. This specification replaces the simplified single-file approach with a structured system that manages all GitHub Copilot configuration files through multi-tier management.organization/ and enterprise/ folders are managed by automation - Preserves: All files under repository/ folders are never modified by sync mechanisms - Flexibility: Organizations can choose which tiers to implement and their synchronization criteria.github/ folder contains three Copilot configuration directories, each supporting the three-tier structure:
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#file-structure-specification","title":"File Structure Specification","text":""},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#file-structure-specification_1","title":"File Structure Specification","text":"Configuration Type Tier File Path Management Description Instructions Enterprise .github/\n\u251c\u2500\u2500 instructions/ # AI agent guidance and patterns\n\u2502 \u251c\u2500\u2500 enterprise/ # Enterprise-managed customizations (automated sync, optional)\n\u2502 \u2502 \u251c\u2500\u2500 main.instructions.md # Enterprise-wide guidelines and compliance\n\u2502 \u2502 \u2514\u2500\u2500 {Language}/ # Enterprise language-specific patterns\n\u2502 \u2502 \u251c\u2500\u2500 main.instructions.md # Enterprise style guides (e.g., C# enterprise standards)\n\u2502 \u2502 \u2514\u2500\u2500 {context}.instructions.md # Enterprise context requirements\n\u2502 \u251c\u2500\u2500 organization/ # Community/framework-managed patterns (automated sync)\n\u2502 \u2502 \u251c\u2500\u2500 main.instructions.md # Core framework guidelines\n\u2502 \u2502 \u2514\u2500\u2500 {Language}/ # Language-specific framework patterns\n\u2502 \u2502 \u251c\u2500\u2500 main.instructions.md # Style guide and core instructions\n\u2502 \u2502 \u2514\u2500\u2500 {context}.instructions.md # Specialized context instructions\n\u2502 \u2514\u2500\u2500 repository/ # Repository-managed overrides (manual)\n\u2502 \u251c\u2500\u2500 main.instructions.md # Repository context and specific rules\n\u2502 \u2514\u2500\u2500 {Language}/ # Repository-specific language customizations\n\u2502 \u251c\u2500\u2500 main.instructions.md # Repository language patterns\n\u2502 \u2514\u2500\u2500 {context}.instructions.md # Repository context overrides\n\u251c\u2500\u2500 prompts/ # Reusable prompt templates\n\u2502 \u251c\u2500\u2500 enterprise/ # Enterprise-specific prompts (automated sync, optional)\n\u2502 \u2502 \u2514\u2500\u2500 {prompt-files} # Enterprise-customized prompt templates\n\u2502 \u251c\u2500\u2500 organization/ # Community/framework prompts (automated sync)\n\u2502 \u2502 \u2514\u2500\u2500 {prompt-files} # Standard framework prompt templates\n\u2502 \u2514\u2500\u2500 repository/ # Repository-specific prompts (manual)\n\u2502 \u2514\u2500\u2500 {prompt-files} # Project-specific prompt templates\n\u2514\u2500\u2500 chatmodes/ # Specialized conversation contexts\n \u251c\u2500\u2500 enterprise/ # Enterprise-specific chat modes (automated sync, optional)\n \u2502 \u2514\u2500\u2500 {chatmode-files} # Enterprise-customized chat modes\n \u251c\u2500\u2500 organization/ # Community/framework chat modes (automated sync)\n \u2502 \u2514\u2500\u2500 {chatmode-files} # Standard framework chat modes\n \u2514\u2500\u2500 repository/ # Repository-specific chat modes (manual)\n \u2514\u2500\u2500 {chatmode-files} # Project-specific chat modes\ninstructions/enterprise/main.instructions.md Enterprise-Managed, Optional Enterprise-wide guidelines, compliance requirements, and governance Instructions Enterprise instructions/enterprise/{Language}/main.instructions.md Enterprise-Managed, Optional Enterprise-specific language standards (e.g., \"C# Enterprise coding standards\") Instructions Enterprise instructions/enterprise/{Language}/{context}.instructions.md Enterprise-Managed, Optional Enterprise-specific patterns for compliance, security, or organizational needs Instructions Organization instructions/organization/main.instructions.md Community/Framework-Managed Universal framework guidelines and architectural principles Instructions Organization instructions/organization/{Language}/main.instructions.md Community/Framework-Managed Community standard style guides and language-specific patterns Instructions Organization instructions/organization/{Language}/{context}.instructions.md Community/Framework-Managed Framework-specific patterns for specialized scenarios Instructions Repository instructions/repository/main.instructions.md Repository-Managed Repository-specific context, technology stack, and project rules Instructions Repository instructions/repository/{Language}/main.instructions.md Repository-Managed Project-specific language overrides and patterns Instructions Repository instructions/repository/{Language}/{context}.instructions.md Repository-Managed Most specific project-based overrides Prompts Enterprise prompts/enterprise/{name}.prompt.md Enterprise-Managed, Optional Enterprise-customized prompt templates incorporating company standards Prompts Organization prompts/organization/{name}.prompt.md Community/Framework-Managed Standard community prompt templates for common development scenarios Prompts Repository prompts/repository/{name}.prompt.md Repository-Managed Project-specific prompt templates tailored to repository requirements Chat Modes Enterprise chatmodes/enterprise/{name}.chatmode.md Enterprise-Managed, Optional Enterprise-specific conversation contexts incorporating company culture and standards Chat Modes Organization chatmodes/organization/{name}.chatmode.md Community/Framework-Managed Standard conversation contexts and AI behaviors from the community Chat Modes Repository chatmodes/repository/{name}.chatmode.md Repository-Managed Project-specific conversation contexts and behaviors"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#context-file-examples","title":"Context File Examples","text":"tests.instructions.md, classes.instructions.md - Folder-specific patterns: workflows.instructions.md, docs.instructions.md - Functional patterns: api.instructions.md, config.instructions.md, compliance.instructions.md
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#prompt-and-chat-mode-precedence","title":"Prompt and Chat Mode Precedence","text":"instructions/enterprise/main.instructions.md) - Enterprise-wide governance and complianceinstructions/enterprise/{Language}/main.instructions.md) - Enterprise language standardsinstructions/enterprise/{Language}/{context}.instructions.md) - Enterprise specialized requirementsinstructions/organization/main.instructions.md) - Community/framework base patternsinstructions/organization/{Language}/main.instructions.md) - Community language-specific patternsinstructions/organization/{Language}/{context}.instructions.md) - Community specialized patternsinstructions/repository/main.instructions.md) - Project-specific context and overridesinstructions/repository/{Language}/main.instructions.md) - Project-specific language patternsinstructions/repository/{Language}/{context}.instructions.md) - Project-specific customizations
.github/copilot-instructions.md).github/ with instructions/, prompts/, and chatmodes/ directoriesenterprise/ folders (if using enterprise tier)repository/main.instructions.md{Language}/ foldersprompts/ and chatmodes/ folders
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#for-repository-contributors","title":"For Repository Contributors","text":"
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#for-enterprise-administrators","title":"For Enterprise Administrators","text":"
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#file-format-specifications","title":"File Format Specifications","text":""},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#instructions-format","title":"Instructions Format","text":"---\napplyTo: \"<glob pattern targeting specific file types>\"\ndescription: \"Brief, actionable description of the instruction's purpose\"\n---\n
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#use-cases","title":"Use Cases","text":""},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#community-framework-adoption","title":"Community Framework Adoption","text":"
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#enterprise-with-custom-standards","title":"Enterprise with Custom Standards","text":"
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#large-enterprise-with-divisions","title":"Large Enterprise with Divisions","text":"
"},{"location":"Solutions/GitHub-Copilot-Customization-Architecture/#internal-enterprise-framework","title":"Internal Enterprise Framework","text":"
"},{"location":"Blog/archive/2024/","title":"2024","text":""},{"location":"Blog/category/test/","title":"test","text":""}]}
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..5fc0f40
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,75 @@
+
+