Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
cfb6558
Add module template reconciliation skill
MariusStorhaug Aug 29, 2026
d5d2ec0
Scope template checks to consumer repositories
MariusStorhaug Aug 29, 2026
02ca898
Define the template impact evaluation
MariusStorhaug Aug 29, 2026
77fc77d
Use the shared native Zensical design
MariusStorhaug Aug 29, 2026
1515a15
Preserve the managed-file documentation anchor
MariusStorhaug Aug 29, 2026
b424217
Match the MSX tablesort source exactly
MariusStorhaug Aug 29, 2026
8dc595e
Keep repository audits read-only
MariusStorhaug Aug 29, 2026
ed2a4e8
Expose the native documentation tree
MariusStorhaug Aug 29, 2026
0bcf506
Keep audit handoffs non-mutating
MariusStorhaug Aug 29, 2026
65c69e8
Require Pester validation for every test set
MariusStorhaug Aug 29, 2026
eb35572
Exclude vendored assets from JavaScript lint
MariusStorhaug Aug 29, 2026
cae4960
Clarify template files are copied at creation
MariusStorhaug Aug 29, 2026
1388fff
Use consistent MSXOrg naming
MariusStorhaug Aug 29, 2026
e72914c
Exclude cookie consent from module templates
MariusStorhaug Aug 29, 2026
083ce78
Standardize community files under .github
MariusStorhaug Aug 29, 2026
de80673
Document the community file path override
MariusStorhaug Aug 29, 2026
4fd4b87
Point guidance at the published documentation
MariusStorhaug Aug 29, 2026
3ea02d2
Add repository-local community guidance
MariusStorhaug Aug 29, 2026
0922daf
Reference canonical repository files without duplication
MariusStorhaug Aug 29, 2026
2eb17ed
Inherit organization community policies
MariusStorhaug Aug 30, 2026
f8d8941
Trim inherited files from module layout
MariusStorhaug Aug 30, 2026
9c41fb1
Use centralized community policy defaults
MariusStorhaug Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<!-- markdownlint-disable MD041 -->
@../AGENTS.md
55 changes: 55 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Contributing

Thank you for investing your time in contributing to this repository.
Read the [PSModule Code of Conduct](https://github.com/PSModule/.github/blob/main/.github/CODE_OF_CONDUCT.md)
before participating, and read
[`AGENTS.md`](../AGENTS.md) for the full guidance chain and documentation
references.

## Before you start

1. Read [`README.md`](../README.md) to understand what Process-PSModule does.
2. Familiarize yourself with the
[repository standard](https://psmodule.io/Process-PSModule/reference/repository-standard/).
3. Check the open issues and pull requests to avoid duplicate work.

## Workflow

This project follows the
[MSX contribution workflow](https://msx.no/docs/Ways-of-Working/Contribution-Workflow/):

1. Open or pick up an issue that describes the change.
2. Create a branch from `main` following the
`<type>/<issue>-<short-slug>` convention.
3. Make small, focused commits and push often.
4. Open a **draft pull request** as soon as the change has a basic shape.
5. Run the **Copilot review loop** until it reports a clean round. File an issue
for out-of-scope findings.
6. Mark the pull request ready for review and enable auto-merge.

For branching details, see
[Branching and Merging](https://msx.no/docs/Ways-of-Working/Branching-and-Merging/).

## Pull requests

- Keep pull requests small and focused on a single deliverable.
- Follow the
[commit conventions](https://msx.no/docs/Ways-of-Working/Commit-Conventions/).
- Follow the
[pull request format](https://msx.no/docs/Ways-of-Working/PR-Format/).

## Issues

Use GitHub Issues to report bugs, request features, or propose improvements.
Follow the
[issue format](https://msx.no/docs/Ways-of-Working/Issues/Process/Format/).

## Code standards

PowerShell and GitHub Actions in this repository follow the
[PSModule framework guidance](https://psmodule.io/Process-PSModule/) and the
[MSX coding standards](https://msx.no/docs/Coding-Standards/).

## Questions

Follow the [PSModule support guidance](https://github.com/PSModule/.github/blob/main/.github/SUPPORT.md).
2 changes: 2 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<!-- markdownlint-disable MD041 -->
Follow the instructions in [AGENTS.md](../AGENTS.md).
5 changes: 4 additions & 1 deletion .github/plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ skill for migrating every Pester test set in a PSModule repository to Pester
skill for upgrading Process-PSModule consumer repositories to framework v8.
It also provides
[`psmodule-zensical-migration`](./psmodule/skills/psmodule-zensical-migration/SKILL.md)
for migrating legacy MkDocs sites to the Process-PSModule Zensical design.
for migrating legacy MkDocs sites to the standard Zensical design, and
[`psmodule-repository-audit`](./psmodule/skills/psmodule-repository-audit/SKILL.md)
for auditing module repositories against the current Template-PSModule
baseline.
Verify the installation with:

```console
Expand Down
4 changes: 2 additions & 2 deletions .github/plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
},
"metadata": {
"description": "Agent plugins for the PSModule repository process.",
"version": "1.0.0"
"version": "1.1.0"
},
"plugins": [
{
"name": "psmodule",
"description": "PSModule process guidance and reusable skills for PowerShell module repositories.",
"version": "1.0.0",
"version": "1.1.0",
"source": ".github/plugin/psmodule"
}
]
Expand Down
5 changes: 3 additions & 2 deletions .github/plugin/psmodule/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,19 @@
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "psmodule",
"description": "PSModule process guidance and reusable skills for PowerShell module repositories.",
"version": "1.0.0",
"version": "1.1.0",
"author": {
"name": "PSModule",
"url": "https://github.com/PSModule"
},
"homepage": "https://psmodule.io/docs/",
"homepage": "https://psmodule.io/Process-PSModule/",
"repository": "https://github.com/PSModule/Process-PSModule",
"license": "MIT",
"keywords": [
"powershell",
"psmodule",
"pester",
"repository-template",
"testing",
"github-actions"
],
Expand Down
184 changes: 184 additions & 0 deletions .github/plugin/psmodule/skills/psmodule-repository-audit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
---
name: psmodule-repository-audit
description: Audit a PSModule repository against the current Template-PSModule baseline while distinguishing template drift from repository-owned code, tests, settings, and content.
---

# Audit a PSModule repository against Template-PSModule

Use this read-only skill when checking an established PowerShell module
repository against the standard files in
[`PSModule/Template-PSModule`](https://github.com/PSModule/Template-PSModule).
Use the same procedure for one repository or as the repository-level audit
inside a fleet campaign. Report changes for a separate migration or delivery
task; do not edit either repository while running this audit.

This skill does not maintain or reconcile `Template-PSModule`. Changes to
Process-PSModule include an impact evaluation that determines whether the
template also needs a coordinated update. Template changes are made and
validated in the template repository before consumer alignment begins.

## Authority and precedence

Use these sources together:

1. The [MSX Repository Standard](https://msx.no/docs/Ways-of-Working/Repository-Standard/)
owns inherited enterprise policy.
2. The [PSModule Repository Standard](https://psmodule.io/Process-PSModule/reference/repository-standard/)
owns PSModule additions and explicit initiative overrides.
3. The default branch of `PSModule/Template-PSModule` owns the executable
implementation of those requirements.
4. The target repository owns its module code, tests, documentation content,
settings, secrets, and justified additions.

Resolve and record the template default-branch commit before comparing files.
Use that one commit throughout the run. Do not embed a snapshot of template
file contents in this skill.

When either governing standard and the template disagree, do not propagate the
discrepancy and do not repair the template from this skill. Report the upstream
gap and block consumer alignment until the policy owner and template agree.
When prose and template implementation express the same requirement
differently, use the template as the byte-level source. For shared Zensical
presentation settings, the MSXOrg documentation design takes precedence over
the Process-PSModule documentation-site implementation.

## Audit boundary

The audit records aligned paths, drift, accepted differences, and blocked
comparisons. It does not edit the template or consumer. A fleet run invokes the
audit once per repository and creates a separate delivery task for each
consumer that needs alignment.

## Inventory

Before comparing:

1. Read the target repository's local guidance, README, workflow, settings,
documentation configuration, tests, and validation commands.
2. Confirm that the target is a PowerShell module repository. Do not force the
module template onto framework, documentation, action, archive, or other
repository types.
3. Resolve the current default branch and commit of `Template-PSModule`.
4. Inventory every template path, including hidden files.
5. Inventory every target path and any explicit local ownership or exception.
6. Record the Process-PSModule caller version, Pester requirement, and
documentation configuration.

## Classify before comparing

Classify every template path. Never infer that every template file can safely
overwrite an established repository.

| Class | Treatment |
| --- | --- |
| Template-owned standard | Compare with the template and report drift unless a documented target exception applies. |
| Parameterized standard | Compare after applying only the substitutions declared by the template or framework. |
| Configurable standard | Keep supported repository-specific values; compare the remaining structure and defaults. |
| Creation scaffold | Use for new repositories. Do not overwrite established module source, tests, examples, or content. |
| Repository-owned addition | Preserve it unless it violates a governing standard or breaks the framework contract. |

Treat `.github/CONTRIBUTING.md`, governance files, caller workflows, linter
settings, dependency configuration, agent entry points, and documentation-site
defaults as template-owned or parameterized unless the template or PSModule
standard says otherwise. Treat `src/`, established `tests/`, `examples/`,
documentation content, and module-specific assets as repository-owned after
creation.

Do not require `.github/CODE_OF_CONDUCT.md`, `.github/SECURITY.md`, or
`.github/SUPPORT.md`. These policies are centrally provided by
`PSModule/.github`; a target may carry a repository-local copy only as a
documented policy override. Do not require `.github/release.yml`: current
Process-PSModule releases do not use GitHub's built-in release configuration.
Report an undocumented local release configuration as stale drift.

Report a root-level duplicate of a community file as drift. GitHub recognizes
these files under `.github/`, which is their canonical PSModule location.

Configuration is not automatically consumer-owned. For example,
`.github/PSModule.yml` may contain valid module-specific overrides while its
schema and unaffected defaults still come from the template. Compare fields,
not only whole-file hashes, when the standard permits overrides.

## Zensical contract

For module repositories, `.github/zensical.toml` comes from the matching path
in `Template-PSModule`.

- Preserve the template's repository placeholders when the framework resolves
them during site staging.
- Do not add a `nav` setting. Zensical generates navigation from the staged
folder structure, places index pages first, and sorts the remaining pages
alphabetically.
- Confirm the template does not define `[project.extra.consent]`. Cookie
consent is not a generated-module default and belongs only in a documented
repository-specific configuration that actually requires it.
- Keep the template's theme, palette, typography, icons, plugins, Markdown
extensions, and supported assets together as one baseline.
- Do not copy path-specific settings from `MSXOrg/docs` or
`Process-PSModule/docs` directly into a generated module site. Their shared
behavior must first be represented in `Template-PSModule` in a form the
Process-PSModule site staging pipeline supports.
- Preserve repository-specific documentation content. A deliberate visual or
functional exception must be documented in the target and reported as an
accepted difference.

When the target still uses MkDocs or requires a documentation layout
migration, report
[`psmodule-zensical-migration`](../psmodule-zensical-migration/SKILL.md) as
required follow-up. Do not invoke a migration skill from this read-only audit.

## Pester and workflow contracts

Template comparison does not prove that an established test suite is compatible
with the template's Pester version. If the target does not already meet the
template's Pester baseline, report
[`psmodule-pester-migration`](../psmodule-pester-migration/SKILL.md) as required
follow-up. If the Process-PSModule caller needs a major-version migration,
report [`psmodule-v8-upgrade`](../psmodule-v8-upgrade/SKILL.md) as required
follow-up.

## Audit output

Report each compared path with:

| Field | Meaning |
| --- | --- |
| Path | Repository-relative path. |
| Class | One of the comparison classes above. |
| Status | Aligned, missing, drifted, extra, accepted difference, or blocked. |
| Action | None, add, update, preserve, remove, or report upstream. |
| Evidence | Template commit and governing standard or documented exception. |

Do not count an extra repository-owned file as drift. Do not call a repository
aligned when a required template-owned file is absent, a Pester migration is
incomplete, or validation did not execute.

## Fleet operation

Follow the MSX Fleet Orchestration standard:

1. Discover repositories from authoritative organization metadata, such as the
`Type: Module` custom property.
2. Use one Task or Bug, branch, draft pull request, and review loop per
repository.
3. Put the campaign slug in every delivery issue and pull request title.
4. Adopt an existing matching pull request instead of opening a duplicate.
5. Store campaign state on GitHub. Local JSON or dashboards are disposable
projections, not sources of truth.
6. Record the template commit in every report and pull request so a later run
can distinguish new template changes from unfinished work.

## Validation

1. Repeat the comparison against the same recorded template commit.
2. Confirm the audit did not change either repository.
3. Run the target's smallest repository-native checks for every changed
surface.
4. Run Pester with the declared version when tests changed.
5. Build the Zensical site when documentation settings or assets changed.
6. Review the diff for unresolved placeholders, generated output, and unrelated
changes.

Report blocked checks and their causes. A clean file comparison is not a
substitute for repository tests, and a green build is not a substitute for
checking template drift.
Loading
Loading