Skip to content

Commit 120554a

Browse files
📖 [Docs]: Process-PSModule owns the documentation root (#452)
Process-PSModule documentation now lives at the root of the site. Its lifecycle overview, getting-started material, guides, reference, specifications, and media no longer sit beneath a `Modules/Process-PSModule` source hierarchy. ## Changed: The framework owns the root page The root page now uses the Process-PSModule title, description, and lifecycle content as its primary documentation. It retains the non-duplicated PSModule and cross-organization context from the former root page, so readers land directly in the framework without losing the broader context. ## Changed: Clear top-level documentation sections The navigation now presents Process-PSModule, Getting started, Guides, Reference, Specification, and Modules at the top level. Reference combines the framework's operational contracts with its module-development standards. Modules is the standalone index for discovering the PSModule organization’s modules. Dictionary pages remain published for inline glossary links without occupying a visible navigation tab. ## Fixed: The module index generator follows the new structure The scheduled documentation update now fills the Modules page and publishes each generated module detail page below it. Catalog icons and module links resolve from their new root-level locations, so the next automated refresh updates the visible module index instead of the retired Catalog path. --- <details> <summary>Technical details</summary> - Implementation plan progress: all steps in the scoped Task are complete. - Moved `get-started/`, `guides/`, `reference/`, `specification/`, and `media/` with `git mv`, preserving file history. - Merged the former inner landing page into `docs/content/index.md`; its front matter, title, and framework content take precedence, while the non-duplicated root content remains below it. - Moved the module-development standards into `docs/content/reference/` and added them to the top-level Reference navigation. - Replaced the Catalog navigation entry with Modules, whose top-level page is the module index. - `Update-ModuleList` now writes generated pages to `docs/content/Modules/Repositories/` and replaces the marker in `docs/content/Modules/index.md`; the V2 catalog template references assets at the correct depth. - Added an isolated Pester regression test for the catalog generator and installed its declared GitHub module dependency in the action test workflow. - Dictionary remains in Zensical's navigation graph because unlisted pages are not built; a scoped stylesheet hides its tab and drawer entries while preserving published glossary URLs. - The strict clean Zensical build succeeds, the catalog Pester suite passes, PSScriptAnalyzer reports no findings, and all in-repository Markdown links resolve. - Standards and framework alignment: | Changed surface | Standards checked | Framework docs checked | Result | | --- | --- | --- | --- | | `docs/content/**` | Documentation Model | Process-PSModule information architecture | Aligned | | `docs/zensical.toml` | Documentation navigation | Zensical navigation indexes | Aligned | | `.github/actions/update-index/**` | PowerShell testing and action conventions | Generated module catalog contract | Aligned | | `AGENTS.md` | Agentic Development | Canonical framework guidance | Aligned | - Issue convergence sweep: reviewed the parent PBI and its current delivery leaves; this pull request implements only the scoped documentation-navigation Task. </details> <details> <summary>Relevant issues (or links)</summary> - Fixes #451 - #423 </details> --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent aa89bbe commit 120554a

40 files changed

Lines changed: 255 additions & 227 deletions

.github/actions/update-index/src/Helper.psm1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ function Update-ModuleList {
831831
$moduleRepos = $Repos | Where-Object {
832832
$_.Type -eq 'Module' -and $_.Owner -eq 'PSModule'
833833
} | Sort-Object Name
834-
$catalogFolderPath = Join-Path 'docs\content\Modules\Catalog' 'Repositories'
834+
$catalogFolderPath = Join-Path 'docs\content\Modules' 'Repositories'
835835
if (-not (Test-Path $catalogFolderPath)) {
836836
Write-Host "Creating catalog folder [$catalogFolderPath]"
837837
$null = New-Item -Path $catalogFolderPath -ItemType Directory
@@ -921,7 +921,7 @@ function Update-ModuleList {
921921

922922
LogGroup 'Write module catalog table to docs index' {
923923
$moduleTable = $moduleCatalogTableTemplate.Replace('{{ ROWS }}', $moduleTableRows.TrimEnd())
924-
Update-MDSection -Path '.\docs\content\Modules\Catalog\index.md' -Name 'MODULE_CATALOG' -Content $moduleTable
924+
Update-MDSection -Path '.\docs\content\Modules\index.md' -Name 'MODULE_CATALOG' -Content $moduleTable
925925
Write-Host 'Module catalog table update completed'
926926
}
927927
}

.github/actions/update-index/templates/module-catalog/v2-table.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
<table>
44
<tr>
55
<th width="24%">Name</th>
6-
<th width="12%"><img src="../../assets/images/module-catalog/githubtags.svg" alt="Version" title="Version" width="16" height="16"></th>
7-
<th width="24%"><img src="../../assets/images/module-catalog/package-variant-closed-check.svg" alt="Process version" title="Process version" width="16" height="16"></th>
8-
<th width="10%"><img src="../../assets/images/module-catalog/githubissues.svg" alt="Issues" title="Issues" width="16" height="16"></th>
9-
<th width="10%"><img src="../../assets/images/module-catalog/githubpullrequests.svg" alt="Pull requests" title="Pull requests" width="16" height="16"></th>
10-
<th width="10%"><img src="../../assets/images/module-catalog/githubstars.svg" alt="Stars" title="Stars" width="16" height="16"></th>
6+
<th width="12%"><img src="../assets/images/module-catalog/githubtags.svg" alt="Version" title="Version" width="16" height="16"></th>
7+
<th width="24%"><img src="../assets/images/module-catalog/package-variant-closed-check.svg" alt="Process version" title="Process version" width="16" height="16"></th>
8+
<th width="10%"><img src="../assets/images/module-catalog/githubissues.svg" alt="Issues" title="Issues" width="16" height="16"></th>
9+
<th width="10%"><img src="../assets/images/module-catalog/githubpullrequests.svg" alt="Pull requests" title="Pull requests" width="16" height="16"></th>
10+
<th width="10%"><img src="../assets/images/module-catalog/githubstars.svg" alt="Stars" title="Stars" width="16" height="16"></th>
1111
</tr>
1212
{{ ROWS }}</table>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
2+
'PSUseDeclaredVarsMoreThanAssignments',
3+
'',
4+
Justification = 'The temporary path is assigned before assertions and cleanup.'
5+
)]
6+
[CmdletBinding()]
7+
param()
8+
9+
BeforeAll {
10+
Import-Module -Name (Join-Path -Path $PSScriptRoot -ChildPath '../src/Helper.psm1') -Force
11+
}
12+
13+
Describe 'Update-ModuleList' {
14+
Context 'catalog page at the Modules root' {
15+
It 'Update-ModuleList - writes the catalog index and repository page to the new Modules paths' {
16+
$testRoot = Join-Path ([System.IO.Path]::GetTempPath()) ("update-index-test-$([guid]::NewGuid())")
17+
$modulesPath = Join-Path $testRoot 'docs/content/Modules'
18+
$catalogIndexPath = Join-Path $modulesPath 'index.md'
19+
New-Item -ItemType Directory -Path $modulesPath -Force | Out-Null
20+
Set-Content -Path $catalogIndexPath -Value @(
21+
'# Modules'
22+
''
23+
'<!-- MODULE_CATALOG_START -->'
24+
'<!-- MODULE_CATALOG_END -->'
25+
)
26+
27+
try {
28+
Push-Location $testRoot
29+
InModuleScope Helper {
30+
Mock Get-RepositoryVersion { '1.2.3' }
31+
Mock Get-RepositoryReadmeContent { '# Example`nExample module summary.' }
32+
Mock Get-MarkdownSummary { 'Example module summary.' }
33+
Mock Get-WorkflowReference { 'v1.2.3' }
34+
Mock Get-ProcessReferenceStatus { 'up-to-date' }
35+
Mock Get-OpenItemCount { 0 }
36+
37+
Update-ModuleList -Repos @(
38+
[pscustomobject]@{
39+
Type = 'Module'
40+
Owner = 'PSModule'
41+
Name = 'Example'
42+
Description = 'Example module.'
43+
DefaultBranch = 'main'
44+
Stars = 1
45+
}
46+
)
47+
}
48+
49+
$catalogContent = Get-Content -Path $catalogIndexPath -Raw
50+
Test-Path (Join-Path $modulesPath 'Repositories/Example.md') | Should -BeTrue
51+
$catalogContent | Should -Match '\./Repositories/Example\.md'
52+
$catalogContent | Should -Match '\.\./assets/images/module-catalog/githubtags\.svg'
53+
} finally {
54+
Pop-Location
55+
Remove-Item -LiteralPath $testRoot -Recurse -Force -ErrorAction SilentlyContinue
56+
}
57+
}
58+
}
59+
}

.github/workflows/Test-Actions.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ jobs:
3636
run: |
3737
Install-PSResource -Name Pester -Version '[5.7.1,6.0.0)' -Repository PSGallery -TrustRepository
3838
Install-PSResource -Name PSSemVer -Repository PSGallery -TrustRepository
39+
Install-PSResource -Name GitHub -Version '[0.43.1,0.44.0)' -Repository PSGallery -TrustRepository
3940
4041
- name: Run action unit tests
4142
shell: pwsh

AGENTS.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ If you find a problem or improvement, fix if small; otherwise open an issue.
1515
Regarding repo structure, module source code, and how the Process-PSModule workflow
1616
works. For PSModule-specific build, layout, and process guidance:
1717

18-
- [Process-PSModule docs](https://psmodule.github.io/docs/Modules/Process-PSModule/)
18+
- [Process-PSModule docs](https://psmodule.io/docs/)
1919
repository structure, module anatomy, and the build/test/pack/publish pipeline.
2020
- [Repository defaults](https://psmodule.github.io/docs/Modules/Repository-Defaults/)
2121
the expected repository layout and required files.
@@ -28,11 +28,11 @@ works. For PSModule-specific build, layout, and process guidance:
2828

2929
For cross-cutting ways of working and standards:
3030

31-
- [Agentic Development](https://msxorg.github.io/docs/Ways-of-Working/Agentic-Development/)
31+
- [Agentic Development](https://msx.no/docs/Ways-of-Working/Agentic-Development/)
3232
how agents and humans collaborate in this ecosystem.
33-
- [Ways of Working](https://msxorg.github.io/docs/Ways-of-Working/) — contribution
33+
- [Ways of Working](https://msx.no/docs/Ways-of-Working/) — contribution
3434
workflow, branching, PRs, issues.
35-
- [Coding Standards](https://msxorg.github.io/docs/Coding-Standards/) — language-level
35+
- [Coding Standards](https://msx.no/docs/Coding-Standards/) — language-level
3636
conventions.
3737
- [MSXOrg/memory](https://github.com/MSXOrg/memory) — durable agent working memory:
3838
gotchas, knowledge, and agent role notes.

docs/content/Modules/Catalog/index.md

Lines changed: 0 additions & 21 deletions
This file was deleted.

docs/content/Modules/Process-PSModule/index.md

Lines changed: 0 additions & 68 deletions
This file was deleted.

docs/content/Modules/index.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
# Modules
22

3-
Process-PSModule now hosts PSModule-org module documentation.
3+
This page indexes modules maintained in the PSModule organization and what each module does.
44

5-
This section is the local source of truth for:
5+
Modules are separate from the [Process-PSModule framework](../index.md). Use the framework documentation to build and release a module; use this page to discover the modules available to install and use.
66

7-
- module catalog and module-level specs
8-
- Process-PSModule structure and build flow
9-
- repository anatomy and template onboarding
7+
## Scope
108

11-
## Sections
9+
Each module page should capture:
1210

13-
- [Repository Standard](Repository-Standard.md)
14-
- [Standards](Standards.md)
15-
- [Module types](Module-Types.md)
16-
- [Test Specification](Test-Specification.md)
17-
- [Versioning](Versioning.md)
18-
- [Catalog](Catalog/index.md) (auto-generated from PSModule repo metadata, release data, and README summaries)
19-
- [Process-PSModule](Process-PSModule/index.md)
11+
- purpose and problem statement
12+
- install and import baseline
13+
- key exported capabilities
14+
- owner and maintenance notes
15+
- lifecycle status
16+
17+
## Module index generation
18+
19+
The module list and linked module pages are generated from PSModule repository metadata and README content, then refreshed automatically.
20+
21+
<!-- MODULE_CATALOG_START -->
22+
23+
<!-- MODULE_CATALOG_END -->

docs/content/Modules/Process-PSModule/get-started/index.md renamed to docs/content/get-started/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ If the module needs several interdependent commands before it is usable at all,
3434
| [Your first release](your-first-release.md) | The pull request flow, version labels, and what happens on merge. |
3535
| [Module bootstrap](module-bootstrap.md) | Getting a brand-new module to its first release with an integration branch. |
3636

37-
For framework-level practices, refer to [MSX Ways of Working](https://msxorg.github.io/docs/Ways-of-Working/).
37+
For framework-level practices, refer to [MSX Ways of Working](https://msx.no/docs/Ways-of-Working/).

docs/content/Modules/Process-PSModule/get-started/module-bootstrap.md renamed to docs/content/get-started/module-bootstrap.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ A brand-new module usually has a small **load-bearing core**: the piece(s) every
99

1010
## Identify the load-bearing core first
1111

12-
What counts as "load-bearing" follows the module's archetype from [Module types](../../Module-Types.md):
12+
What counts as "load-bearing" follows the module's archetype from [Module types](../reference/module-types.md):
1313

1414
- **Data modules** — the conversion pivot: `ConvertFrom-<Format>` / `ConvertTo-<Format>` (and whatever parser/serializer they wrap). Every other function (`Import-`, `Export-`, `Format-`, `Merge-`, ...) is built on top of this pivot and is meaningless without it.
1515
- **Integration (API) modules** — a [`Context`](https://github.com/PSModule/Context)-backed credential/config store, the client setup that uses it, and at least one API function that consumes the context end-to-end. Every other API function needs the same context and client to do anything.
@@ -19,13 +19,13 @@ Scope the integration branch to exactly that core, not to everything planned for
1919
## Pattern
2020

2121
1. Cut one long-lived branch from the default branch for the initial release, named for the outcome, e.g. `build-thing-module`.
22-
2. Open one pull request per function (or small group of related functions) targeting that branch instead of `main`. These PRs can land in parallel — there is no strict order between them, unlike a [stacked pull request](https://msxorg.github.io/docs/Ways-of-Working/Branching-and-Merging/#stacked-pull-requests).
22+
2. Open one pull request per function (or small group of related functions) targeting that branch instead of `main`. These PRs can land in parallel — there is no strict order between them, unlike a [stacked pull request](https://msx.no/docs/Ways-of-Working/Branching-and-Merging/#stacked-pull-requests).
2323
3. Once the load-bearing core is coherent and complete, open the pull request that merges the integration branch into `main`. This becomes the module's first real release (`v1.0.0`).
2424
4. Smaller follow-up features (one more function, a formatter, an alias) can keep targeting the integration branch before it lands, the same way they targeted it during bootstrap.
2525

2626
## After the core lands
2727

28-
Once the core has merged as `v1.0.0`, ordinary [SemVer](../../Versioning.md) applies: a new function built on the stable core is a **minor** bump, a fix is a **patch** bump, and only a change to the core's own contract (signature, exported class shape, behavior) is a **major** bump. No special versioning exception is needed once the core is in place — the bootstrap phase exists only to get that core to a first release quickly.
28+
Once the core has merged as `v1.0.0`, ordinary [SemVer](../reference/versioning.md) applies: a new function built on the stable core is a **minor** bump, a fix is a **patch** bump, and only a change to the core's own contract (signature, exported class shape, behavior) is a **major** bump. No special versioning exception is needed once the core is in place — the bootstrap phase exists only to get that core to a first release quickly.
2929

3030
```mermaid
3131
gitGraph
@@ -60,6 +60,6 @@ A module bootstrapped this way:
6060
## When to use this
6161

6262
- The module has no usable release yet, and the load-bearing core hasn't landed.
63-
- Use this only for the initial bootstrap. Once `main` has a first release, ongoing feature work targets `main` directly with ordinary topic branches, or a [stacked pull request](https://msxorg.github.io/docs/Ways-of-Working/Branching-and-Merging/#stacked-pull-requests) when changes genuinely depend on each other.
63+
- Use this only for the initial bootstrap. Once `main` has a first release, ongoing feature work targets `main` directly with ordinary topic branches, or a [stacked pull request](https://msx.no/docs/Ways-of-Working/Branching-and-Merging/#stacked-pull-requests) when changes genuinely depend on each other.
6464

65-
For the general branching and merge model, see [MSX Branching and Merging](https://msxorg.github.io/docs/Ways-of-Working/Branching-and-Merging/).
65+
For the general branching and merge model, see [MSX Branching and Merging](https://msx.no/docs/Ways-of-Working/Branching-and-Merging/).

0 commit comments

Comments
 (0)