Browse Source

Merge pull request #94 from raandree/ai/docs-on-github

docs: keep the documentation on GitHub
pull/97/head
Raimund Andrée 1 week ago
committed by GitHub
parent
commit
bde59a5a3e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 45
      .memory-bank/activeContext.md
  2. 7
      .memory-bank/decisions/0004-online-help-on-github.md
  3. 25
      .memory-bank/decisions/0009-docs-on-github.md
  4. 124
      .memory-bank/progress.md
  5. 10
      .memory-bank/projectbrief.md
  6. 7
      .memory-bank/systemPatterns.md
  7. 62
      .memory-bank/techContext.md
  8. 21
      .readthedocs.yml
  9. 8
      CHANGELOG.md
  10. 37
      Docs/Contributing/02-Writing.md
  11. 12
      Docs/Contributing/04-Markdown-Specifics.md
  12. 33
      Docs/README.md
  13. 152
      Docs/Version-History.md
  14. 1
      Docs/requirements.txt
  15. 11
      README.md
  16. 57
      mkdocs.yml

45
.memory-bank/activeContext.md

@ -1,6 +1,6 @@
--- ---
status: current status: current
last-verified: 2026-10-02 last-verified: 2026-10-04
owner: active-agent owner: active-agent
source: current task evidence source: current task evidence
--- ---
@ -9,32 +9,29 @@ source: current task evidence
## Current focus ## Current focus
Work packages 1 and 2 are pushed; the maintainer opens their PRs: Work package 3 was redefined by the maintainer: no Read the Docs, the docs
`ai/housekeeping` into `master`, and `ai/ship-help` into stay on GitHub, and the wiki is retired (Decision 9). It is PR-ready on the
`ai/housekeeping`. The work packages and their order are in `progress.md`. local branch `ai/docs-on-github` (`84328dc` plus Memory Bank notes). Work
package 4 (manifest and version) continues next, stacked on it, with the
maintainer's decisions recorded in `progress.md`.
## Evidence ## Evidence
- AppVeyor 54834155 (`ai/housekeeping`, `74abb0b`) passed. AppVeyor - All 256 relative links in `Docs`, `README.md`, and `CHANGELOG.md` resolve,
54834154 (`ai/ship-help`, `fba3a7d`) passed all four `test_script` including 5 anchors checked against GitHub's slug rules; MarkdownLinkCheck
steps; Pester passed 218 of 218 tests in Windows PowerShell 5.1, 0.2.0 (CI step 02) finds 0 broken links in `Docs` in Windows PowerShell
including the `Get-Help -Online` tests. 5.1; markdownlint reports 0 issues in the changed pages.
- The same build listed 870 tests on the Tests tab: the NUnit import files - The documented manual install (`Unblock-File`, `Expand-Archive` into
each Pester 5 test under every enclosing block (Pester, file, Describe, `$env:ProgramFiles\WindowsPowerShell\Modules`) was tested with the 4.2.6
Context), so 216 tests appear four times and 2 three times. The zip in a `$env:TEMP` sandbox: the module imports under `RemoteSigned`.
follow-up commit on `ai/ship-help` reports the results through the build `Expand-Archive` doesn't pass the download mark on; File Explorer's zip
worker API instead (`POST api/tests/batch`), one entry per test; a local handler does, and the import then fails.
run of step 04 against a sample test file sent 11 entries for 11 tests. - The wiki stopped at 4.2.4; the Gallery has 4.2.5 (2019-07-11) and 4.2.6
- The AppVeyor job log API returns `application/octet-stream`; decode the (2019-07-12), whose notes were reconstructed from `4.2.4..4.2.6`.
bytes as UTF-8 before searching it. - The local branch `ai/read-the-docs` keeps the dropped strict-build work
- Merging work package 1 with a merge commit keeps `ai/ship-help` valid; (`886c874`, `325ec76`); delete it once it is no longer wanted.
after a squash merge it needs
`git rebase --onto origin/master ai/housekeeping ai/ship-help`.
- PR descriptions for both work packages are in the session folder
(`files/pr`), outside the repository.
## Next step ## Next step
The maintainer pushes the follow-up commit on `ai/ship-help`, opens both Ask which assemblies follow the module version, then implement work
PRs, and checks that AppVeyor lists 218 tests; then work package 3 (Read package 4 test-first on a branch stacked on `ai/docs-on-github`.
the Docs).

7
.memory-bank/decisions/0004-online-help-on-github.md

@ -1,7 +1,7 @@
--- ---
status: accepted status: accepted
date: 2026-10-02 date: 2026-10-02
last-verified: 2026-10-02 last-verified: 2026-10-04
owner: shared owner: shared
source: PR #91 (moved from systemPatterns.md) source: PR #91 (moved from systemPatterns.md)
--- ---
@ -10,5 +10,6 @@ source: PR #91 (moved from systemPatterns.md)
- Choice: `online version` of every cmdlet page is - Choice: `online version` of every cmdlet page is
`https://github.com/raandree/NTFSSecurity/blob/master/Docs/Cmdlets/<Name>.md`. `https://github.com/raandree/NTFSSecurity/blob/master/Docs/Cmdlets/<Name>.md`.
- Rationale: The Read the Docs project builds a stale fork, so its URLs show - Rationale: GitHub renders the docs of `master`, and there is no other
outdated pages; GitHub always shows `master`. documentation site (Decision 9). Originally chosen because the Read the
Docs project built a stale fork.

25
.memory-bank/decisions/0009-docs-on-github.md

@ -0,0 +1,25 @@
---
status: accepted
date: 2026-10-04
last-verified: 2026-10-04
owner: shared
source: maintainer decision in work package 3
---
# Decision 9: Keep the documentation on GitHub
- Choice: The documentation lives in `Docs` and `README.md`, and GitHub
renders it. There is no documentation site: the Read the Docs and MkDocs
configuration is removed. The GitHub wiki is retired: its version history
and installation steps moved to `Docs/Version-History.md` and
`Docs/README.md`, and the maintainer turns the wiki off.
- Rationale: One source of truth that is versioned with the code, reviewed
in pull requests, and checked by AppVeyor. The Read the Docs project
`ntfssecurity` belongs to `Sup3rlativ3` and points to a fork that no
longer exists; a wiki is edited outside pull requests and CI.
- Consequences: `online version` links stay on GitHub (Decision 4). Section
anchors follow GitHub's rules. `Docs/index.md` became `Docs/README.md`, so
that GitHub shows it when you open the `Docs` folder.
- Rejected: taking over or re-importing the Read the Docs project with a
strict MkDocs build (prepared on the local branch `ai/read-the-docs`, not
merged), and publishing `Docs` to the wiki.

124
.memory-bank/progress.md

@ -1,6 +1,6 @@
--- ---
status: current status: current
last-verified: 2026-10-02 last-verified: 2026-10-04
owner: active-agent owner: active-agent
source: repository evidence source: repository evidence
--- ---
@ -9,44 +9,35 @@ source: repository evidence
## Current status ## Current status
PR #91 is merged: documentation matches the cmdlets at HEAD. The module PRs #91, #92, and #93 are merged. The documentation matches the cmdlets at
source is unchanged since the 4.2.6 release except the `master`, and the module ships the help file generated from it
`Remove-Item2 -PassThru` rename and `CompatiblePSEditions`. (`en-US\NTFSSecurity.dll-Help.xml`). Otherwise the module source differs
from the 4.2.6 release only by the `Remove-Item2 -PassThru` rename and
`CompatiblePSEditions`.
## Recent milestones ## Recent milestones
- 2026-10-02: Memory Bank initialized. - 2026-10-02: Memory Bank initialized. PR #91 aligned the documentation
- 2026-10-02: Documentation aligned with the code: 36 cmdlet pages filled with the code (36 cmdlet pages, conceptual pages, README, `mkdocs.yml`,
from the C# source and checked at runtime in a sandbox; Concepts, Examples, `.readthedocs.yml`, `CHANGELOG.md`) and made `appveyor.yml` build the
home page, contributor guide, README rewritten; `mkdocs.yml` nav, module and check the docs against that build (Decision 6); squash-merged
`edit_uri`, and `.readthedocs.yml` (`build.os`) fixed; `CHANGELOG.md` as `690d8dd`.
created. - 2026-10-02: PR #83 (TechNet links) closed by the maintainer as superseded
- 2026-10-02: PR #91 build fixed: `appveyor.yml` builds the module from by #91.
source and checks the docs against that build instead of the Gallery - 2026-10-04: Work package 1 merged as PR #92 with a merge commit
release (root cause of the `Remove-Item2 -PassThru` drift failure). (`d917832`): `promptHistory.md` ignored, Decision 7, Decisions moved to
- 2026-10-02: PR #91 merged into `master` as `690d8dd` (squash merge); `decisions/`.
branch `ai/docs-alignment` deleted locally and on GitHub. - 2026-10-04: Work package 2 squash-merged as PR #93 (`14799fb`): generated
- 2026-10-02: Work package 1 (housekeeping, `ai/housekeeping`): local help file shipped (Decision 8), stale help files removed, `FileList`
`promptHistory.md` ignored by git; changelog policy recorded as complete, `Tests\Help.Tests.ps1` (218 Pester tests), CI steps 03 (help
Decision 7; Decisions moved from `systemPatterns.md` to `decisions/`. file current) and 04 (Pester, one Tests-tab entry per test; the NUnit
- 2026-10-02: PR #83 (TechNet tutorial links) reviewed and found upload had listed 870), six cmdlet-page links reworded for the help
superseded: #91 ships the same two `learn.microsoft.com` links in text. AppVeyor passed 218 of 218 on the PR (54834295) and on `master`
`Docs/index.md` and `README.md`. The maintainer decided to close it; (54834350).
the remote-mutation hook denied the agent's `gh pr close`, so the - 2026-10-04: The maintainer dropped Read the Docs: the docs stay on GitHub
maintainer closed it by hand (2026-10-02 21:18 UTC). and the wiki is retired (Decision 9). Work package 3 committed locally on
- 2026-10-02: Work package 2 (ship help, `ai/ship-help`, stacked on `ai/docs-on-github` (`84328dc`). The strict Read the Docs build prepared
`ai/housekeeping`): `en-US\NTFSSecurity.dll-Help.xml` generated from before stays unmerged on the local branch `ai/read-the-docs`.
`Docs/Cmdlets`, committed, copied by the csproj, and listed in a complete
`FileList` (Decision 8); stale `NTFSSecurity-Help.xml` and the unused
`NTFSSecurity.Help.pshproj` removed; `Tests\Help.Tests.ps1` (Pester 5)
and two CI steps added; six inline links in five cmdlet pages reworded
because platyPS drops the space after a link in the help text. Tests: 218
of 218 pass in Windows PowerShell 5.1; without the help file 180 of 182
failed.
- 2026-10-04: Work packages 1 and 2 pushed; AppVeyor 54834155
(`74abb0b`) and 54834154 (`fba3a7d`, 218 of 218 Pester tests) passed. A
follow-up commit reports each test once on the AppVeyor Tests tab
(the NUnit upload listed 870 entries).
## Stable capabilities ## Stable capabilities
@ -59,30 +50,47 @@ source is unchanged since the 4.2.6 release except the
## Open work ## Open work
Work packages in the order agreed with the maintainer. Each gets one Work packages in the order agreed with the maintainer. Each gets one
`ai/<slug>` branch and PR, committed locally; the maintainer pushes, and `ai/<slug>` branch and PR, committed locally. The maintainer pushes and
the next package starts only after the maintainer's go-ahead. opens the PR (the agent can't; see `techContext.md`, Constraints), and the
next package starts only after the maintainer's go-ahead.
1. Housekeeping: `ai/housekeeping` pushed at `74abb0b`, AppVeyor green;
PR into `master` to open. 1. Housekeeping: done (#92).
2. Ship help: `ai/ship-help` pushed at `fba3a7d`, AppVeyor green; the 2. Ship help: done (#93).
follow-up commit for the Tests tab awaits push. PR into 3. Docs on GitHub (was: Read the Docs), PR-ready on `ai/docs-on-github`:
`ai/housekeeping` to open. Read the Docs and MkDocs configuration removed, `Docs/index.md` renamed
3. Read the Docs: project `ntfssecurity` (maintainer `Sup3rlativ3`) builds to `Docs/README.md`, the wiki's version history and install steps moved
the fork; switch it to this repository or import a new project. Ask into `Docs` (with reconstructed notes for 4.2.5 and 4.2.6), contributor
before installing Python for `mkdocs build --strict`. guide updated. After the merge, the maintainer turns the wiki off, points
4. Manifest and version: remove `Show-NTFSSimpleAccess` and the duplicate the notes of releases 4.2.4 and 4.2.6 to `Docs/Version-History.md`, and
inheritance entries from `CmdletsToExport` (36 cmdlets remain); ask may ask `Sup3rlativ3` to delete the Read the Docs project.
about the next version (with or without a `PassThur` alias), 4. Manifest and version, in progress, stacked on `ai/docs-on-github`.
`PowerShellVersion`, and `DotNetFrameworkVersion`; align `AssemblyInfo`. Maintainer decisions: `PowerShellVersion` 5.1, `DotNetFrameworkVersion`
No tag or publish. Inputs found in work package 2: `Test-ModuleManifest` 4.5.2, `RootModule` instead of `ModuleToProcess`; version 5.0.0 with
already fails on `PowerShellVersion = '2.0'` with `CompatiblePSEditions`; `[Alias('PassThur')]` on `Remove-Item2 -PassThru` (the changelog lists
releases ship Debug builds plus `.pdb`, `.xml`, and `-PassThur` under Deprecated); the changelog entry about the
`System.Management.Automation.dll` (`Private=True` reference), which documentation site is gone (work package 3). Open: which assemblies
`FileList` doesn't list. follow the module version. Remove `Show-NTFSSimpleAccess` and the
duplicate inheritance entries from `CmdletsToExport` (exactly 36
cmdlets exported), move the `[Unreleased]` entries into the 5.0.0
section, and align `AssemblyInfo`. No tag or publish. Done when
`Test-ModuleManifest` passes in Windows PowerShell 5.1 and PowerShell 7,
36 cmdlets are exported, the versions agree, and CI is green.
Baseline: `Test-ModuleManifest` fails in both editions
(`CompatiblePSEditions` needs `PowerShellVersion` 5.1) and warns about
`ModuleToProcess`; 41 `CmdletsToExport` entries, 37 unique; versions:
manifest 4.2.5, `NTFSSecurity` 4.2.1.0, `Security2` 3.2.3.0,
`PrivilegeControl` 1.0.0.0, `ProcessPrivileges` 1.5.7.0 (vendored);
`Log` isn't shipped. Releases are Debug builds published with the whole
output folder (`.pdb`, `.xml`, `System.Management.Automation.dll`), which
`FileList` doesn't list. Before the next build and `Publish-Module`,
clean `C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity`, or the
removed `NTFSSecurity-Help.xml` ships again.
5. Code defects, listed below: `review: on`, one PR per group, regression 5. Code defects, listed below: `review: on`, one PR per group, regression
test first. Pester 5 tests import `NTFSSecurity\bin\Release`, run in a test first. Pester 5 tests import `NTFSSecurity\bin\Release`, run in a
`$env:TEMP` sandbox and in `appveyor.yml`, and skip elevated cases when `$env:TEMP` sandbox and in `appveyor.yml` (pattern:
not elevated. Each fix updates its cmdlet page and `CHANGELOG.md`. `Tests\Help.Tests.ps1`), and skip elevated cases when not elevated;
check whether AppVeyor runs elevated. Each fix updates its cmdlet page
and `CHANGELOG.md`.
### Code defects (work package 5) ### Code defects (work package 5)

10
.memory-bank/projectbrief.md

@ -19,8 +19,9 @@ Source: `README.md`, `NTFSSecurity/NTFSSecurity.psd1`.
## Scope ## Scope
- In scope: module source (`NTFSSecurity`, `Security2`, `PrivilegeControl`, - In scope: module source (`NTFSSecurity`, `Security2`, `PrivilegeControl`,
`ProcessPrivileges`), module manifest and type/format data, the MkDocs `ProcessPrivileges`), module manifest and type/format data, the
documentation site in `Docs/`, and `README.md`. documentation in `Docs/` (rendered by GitHub, Decision 9), and
`README.md`.
- Out of scope: registry security. `Security2/Registry/RegistrySecurity.cs` - Out of scope: registry security. `Security2/Registry/RegistrySecurity.cs`
exists, but no registry cmdlet is exported. exists, but no registry cmdlet is exported.
- Distribution: PowerShell Gallery package `NTFSSecurity` and GitHub releases. - Distribution: PowerShell Gallery package `NTFSSecurity` and GitHub releases.
@ -28,8 +29,9 @@ Source: `README.md`, `NTFSSecurity/NTFSSecurity.psd1`.
## Stakeholders ## Stakeholders
- Maintainer and author: Raimund Andree (`raandree`), per the manifest. - Maintainer and author: Raimund Andree (`raandree`), per the manifest.
- Documentation contributors: James Smith (`mkdocs.yml` `site_author`); - Documentation contributors: James Smith (`site_author` in the former
the AppVeyor documentation build runs under the `Sup3rlativ3` account. `mkdocs.yml`) and `Sup3rlativ3` (#62), who owns the Read the Docs project
`ntfssecurity` and a second AppVeyor project.
- End users: To confirm beyond the README summary. - End users: To confirm beyond the README summary.
## Acceptance criteria ## Acceptance criteria

7
.memory-bank/systemPatterns.md

@ -1,6 +1,6 @@
--- ---
status: current status: current
last-verified: 2026-10-02 last-verified: 2026-10-04
owner: active-agent owner: active-agent
source: repository evidence source: repository evidence
--- ---
@ -55,6 +55,7 @@ Each Decision record is a file in `decisions/`; read only the relevant ones.
| 6 | [CI checks the docs against a build of the source](decisions/0006-ci-checks-docs-against-build.md) | | 6 | [CI checks the docs against a build of the source](decisions/0006-ci-checks-docs-against-build.md) |
| 7 | [CHANGELOG lists user-visible changes only](decisions/0007-changelog-user-visible-only.md) | | 7 | [CHANGELOG lists user-visible changes only](decisions/0007-changelog-user-visible-only.md) |
| 8 | [Commit the generated help file and check it in CI](decisions/0008-commit-generated-help.md) | | 8 | [Commit the generated help file and check it in CI](decisions/0008-commit-generated-help.md) |
| 9 | [Keep the documentation on GitHub](decisions/0009-docs-on-github.md) |
## Patterns ## Patterns
@ -62,6 +63,10 @@ Each Decision record is a file in `decisions/`; read only the relevant ones.
- Run platyPS in Windows PowerShell 5.1 against a module build; a copy of - Run platyPS in Windows PowerShell 5.1 against a module build; a copy of
`Docs/Cmdlets` must round-trip through `Update-MarkdownHelp` unchanged. `Docs/Cmdlets` must round-trip through `Update-MarkdownHelp` unchanged.
- GitHub renders the docs (Decision 9). AppVeyor's link check covers only
relative links in `Docs` and ignores anchors, so check anchors against
GitHub's slug rules (lowercase, punctuation removed, spaces to hyphens)
and the links in `README.md` and `CHANGELOG.md` separately.
- platyPS rewrites non-ASCII punctuation such as em dashes; keep cmdlet pages - platyPS rewrites non-ASCII punctuation such as em dashes; keep cmdlet pages
ASCII-only. ASCII-only.
- In cmdlet pages, end a sentence with a link: platyPS renders a link as - In cmdlet pages, end a sentence with a link: platyPS renders a link as

62
.memory-bank/techContext.md

@ -1,6 +1,6 @@
--- ---
status: current status: current
last-verified: 2026-10-02 last-verified: 2026-10-04
owner: active-agent owner: active-agent
source: repository evidence source: repository evidence
--- ---
@ -19,8 +19,8 @@ source: repository evidence
- Module: `NTFSSecurity.psd1` loads `NTFSSecurity.psm1` (aliases `dir2`, - Module: `NTFSSecurity.psd1` loads `NTFSSecurity.psm1` (aliases `dir2`,
`gi2`, `rm2`, `del2`), `NTFSSecurity.Init.ps1` (Add-Type of the helper `gi2`, `rm2`, `del2`), `NTFSSecurity.Init.ps1` (Add-Type of the helper
assemblies, prepends `NTFSSecurity.format.ps1xml`), and `NTFSSecurity.dll`. assemblies, prepends `NTFSSecurity.format.ps1xml`), and `NTFSSecurity.dll`.
- Documentation: MkDocs (`mkdocs.yml`, theme `readthedocs`, `docs_dir: ./Docs`) - Documentation: Markdown in `Docs` and `README.md`, rendered by GitHub; no
built by Read the Docs (`.readthedocs.yml` v2); cmdlet pages are platyPS documentation site and no wiki (Decision 9). Cmdlet pages are platyPS
0.14 markdown (schema 2.0.0) in `Docs/Cmdlets`. 0.14 markdown (schema 2.0.0) in `Docs/Cmdlets`.
- Help: `NTFSSecurity\en-US\NTFSSecurity.dll-Help.xml`, generated from - Help: `NTFSSecurity\en-US\NTFSSecurity.dll-Help.xml`, generated from
`Docs/Cmdlets` and committed (Decision 8). `Docs/Cmdlets` and committed (Decision 8).
@ -39,18 +39,33 @@ source: repository evidence
package; the legacy C# 5 compiler fails with CS0136. `dotnet msbuild` package; the legacy C# 5 compiler fails with CS0136. `dotnet msbuild`
fails on the binary resources in `Resources.resx` (MSB3822, MSB3823). fails on the binary resources in `Resources.resx` (MSB3822, MSB3823).
- platyPS 0.14.2, Pester 5.7.1, PSScriptAnalyzer, and powershell-yaml are - platyPS 0.14.2, Pester 5.7.1, PSScriptAnalyzer, and powershell-yaml are
installed only for PowerShell 7. Windows PowerShell 5.1 imports platyPS installed only for PowerShell 7. Windows PowerShell 5.1, started from
and Pester by full path PowerShell 7, imports platyPS and Pester by full path
(`~\OneDrive\Documents\PowerShell\Modules\platyPS\0.14.2`, (`~\OneDrive\Documents\PowerShell\Modules\platyPS\0.14.2`,
`C:\Program Files\PowerShell\Modules\Pester\5.7.1`) with `C:\Program Files\PowerShell\Modules\Pester\5.7.1`). Leave
`$env:PSModulePath` cleared. MarkdownLinkCheck is not installed. `$env:PSModulePath` alone: PowerShell 7 hands the child the Windows
PowerShell default path, and clearing it leaves Windows PowerShell without
its core modules (Pester fails: `Add-Member` not found).
- MarkdownLinkCheck is not installed, and `Save-Module` crashed (FailFast)
in PowerShell 7.6 on 2026-10-04. Download the 0.2.0 package from
`https://www.powershellgallery.com/api/v2/package/MarkdownLinkCheck/0.2.0`
into `$env:TEMP`, extract it, and import it by path.
- The workstation is ARM64; PowerShell 7 runs as x64 under emulation.
Python 3.12.10 (ARM64) is installed per user with winget, the
maintainer's choice for an MkDocs check that Decision 9 made unnecessary.
- The NuGet cache (`~\.nuget\packages`) holds every build dependency: copy
`alphafs\2.2.1`, `system.management.automation.dll\10.0.10586`, and
`microsoft.netframework.referenceassemblies.net452\1.0.3` into
`packages\<Id>.<Version>`, and point `CscToolPath` at
`microsoft.net.compilers\4.2.0\tools`.
## Constraints ## Constraints
- `ModuleVersion` in the source manifest is `4.2.5`; the latest tag and - `ModuleVersion` in the source manifest is `4.2.5`; the latest tag and
Gallery release is `4.2.6`. Gallery release is `4.2.6`.
- HEAD differs from tag `4.2.6` only by the `Remove-Item2 -PassThur` to - Besides the shipped help file and its tests (#93), the module source at
`-PassThru` rename and `CompatiblePSEditions` in the manifest. `master` differs from tag `4.2.6` only by the `Remove-Item2 -PassThur`
to `-PassThru` rename and `CompatiblePSEditions` in the manifest.
- `CmdletsToExport` lists `Show-NTFSSimpleAccess`, which no longer exists - `CmdletsToExport` lists `Show-NTFSSimpleAccess`, which no longer exists
(WinForms code removed in `d3063de`), and repeats the inheritance cmdlets. (WinForms code removed in `d3063de`), and repeats the inheritance cmdlets.
- `Test-ModuleManifest` fails in Windows PowerShell 5.1: - `Test-ModuleManifest` fails in Windows PowerShell 5.1:
@ -63,13 +78,25 @@ source: repository evidence
published manifest differs from the tag only by `ModuleVersion` (tags published manifest differs from the tag only by `ModuleVersion` (tags
carry the previous version). GitHub releases attach `NTFSSecurity.zip`. carry the previous version). GitHub releases attach `NTFSSecurity.zip`.
- CI: AppVeyor project `raandree/ntfssecurity` builds branches and pull - CI: AppVeyor project `raandree/ntfssecurity` builds branches and pull
requests. Read the Docs (`ntfssecurity`) and a second AppVeyor project are requests. The Read the Docs project `ntfssecurity` (maintainer
attached to the fork `Sup3rlativ3/NTFSSecurity`. `Sup3rlativ3`) and a second AppVeyor project are attached to the fork
`Sup3rlativ3/NTFSSecurity`, which no longer exists (GitHub 404,
2026-10-04). That site still serves pages from 2020 and isn't used
(Decision 9).
- `Get-FileHash2` fails in PowerShell 7; all other cmdlets passed a smoke - `Get-FileHash2` fails in PowerShell 7; all other cmdlets passed a smoke
test in PowerShell 7.6. test in PowerShell 7.6.
- `CHANGELOG.md` lists user-visible changes only; CI and build-only changes - `CHANGELOG.md` lists user-visible changes only; CI and build-only changes
get no entry get no entry
([Decision 7](decisions/0007-changelog-user-visible-only.md)). ([Decision 7](decisions/0007-changelog-user-visible-only.md)).
- Remote mutations are the maintainer's: the user-level preToolUse hook
`Block-RemoteMutation.ps1` denies `git push` and mutating `gh` commands
(`pr create`, `pr close`, and others) from the agent session, even after
an explicit request. Its override, `COPILOT_ATELIER_ALLOW_REMOTE=1`, is
read from the environment that VS Code starts the hook with; setting it
inside an agent command has no effect (verified 2026-10-04). The hook
matches the whole command text, so a commit message that quotes such a
command is blocked too. Prepare the commands and descriptions; the
maintainer runs them.
## Validation ## Validation
@ -93,10 +120,13 @@ source: repository evidence
- Help file: `New-ExternalHelp -Path .\Docs\Cmdlets -OutputPath - Help file: `New-ExternalHelp -Path .\Docs\Cmdlets -OutputPath
.\NTFSSecurity\en-US -Force` must leave `git status` unchanged. .\NTFSSecurity\en-US -Force` must leave `git status` unchanged.
- Pester: run detached (`Start-DetachedPowerShell.ps1`) in Windows - Pester: run detached (`Start-DetachedPowerShell.ps1`) in Windows
PowerShell 5.1; a run without `bin\Release\en-US` must fail. PowerShell 5.1: the launcher starts `pwsh`, and its payload runs
`powershell.exe -NoProfile -EncodedCommand` with Pester imported by full
path. A run without `bin\Release\en-US` must fail.
- Markdown lint: `npx markdownlint-cli2` with `MD013` limited to prose - Markdown lint: `npx markdownlint-cli2` with `MD013` limited to prose
(tables, code, and headings excluded) on the conceptual pages. (tables, code, and headings excluded) on the conceptual pages.
- YAML: `ConvertFrom-Yaml` (powershell-yaml) on `mkdocs.yml`, - YAML: `ConvertFrom-Yaml` (powershell-yaml) on `appveyor.yml`.
`.readthedocs.yml`, and `appveyor.yml`; every `nav` target must exist. - Links: AppVeyor step 02 (MarkdownLinkCheck 0.2.0) checks only relative
- MkDocs needs Python, which this workstation does not have; `mkdocs build links in `Docs`; it strips anchors and skips absolute URLs. Check anchors
--strict` was not run. against GitHub's heading slugs, and the links in `README.md` and
`CHANGELOG.md`, with a script.

21
.readthedocs.yml

@ -1,21 +0,0 @@
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Required: the build image and the Python version
build:
os: ubuntu-24.04
tools:
python: "3.12"
# Build documentation with MkDocs
mkdocs:
configuration: mkdocs.yml
# Install the MkDocs version that the site is built with
python:
install:
- requirements: Docs/requirements.txt

8
CHANGELOG.md

@ -4,9 +4,7 @@ All notable changes to this project are documented in this file.
The format is based on The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases up to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases up to
4.2.6 are described in the 4.2.6 are described in the [version history](Docs/Version-History.md).
[version history](https://github.com/raandree/NTFSSecurity/wiki/Version-History)
in the wiki.
## [Unreleased] ## [Unreleased]
@ -20,6 +18,8 @@ in the wiki.
inputs, outputs, and notes, checked against the source code inputs, outputs, and notes, checked against the source code
- Rewrite the home, concepts, examples, and contributor pages to match the - Rewrite the home, concepts, examples, and contributor pages to match the
current cmdlets, including module settings, privileges, and long paths current cmdlets, including module settings, privileges, and long paths
- Move the version history and the installation instructions from the wiki
into the documentation, and add the missing notes for 4.2.5 and 4.2.6
### Fixed ### Fixed
@ -29,7 +29,5 @@ in the wiki.
`NTFSSecurity-Help.xml` `NTFSSecurity-Help.xml`
- Fix documentation examples that did not work, such as restoring - Fix documentation examples that did not work, such as restoring
permissions from a CSV file and filtering entries by account permissions from a CSV file and filtering entries by account
- Fix the documentation site navigation, the "Edit on GitHub" links, and the
Read the Docs build configuration
[Unreleased]: https://github.com/raandree/NTFSSecurity/compare/4.2.6...HEAD [Unreleased]: https://github.com/raandree/NTFSSecurity/compare/4.2.6...HEAD

37
Docs/Contributing/02-Writing.md

@ -1,24 +1,25 @@
# Write documentation # Write documentation
The NTFSSecurity documentation is written in Markdown and built into a The NTFSSecurity documentation is written in Markdown and lives in the
website with [MkDocs][mkdocs]. This page explains how the documentation is `Docs` folder of the repository, where GitHub renders it. This page explains
organized and how to change it. how the documentation is organized and how to change it.
## Documentation structure ## Documentation structure
| Path | Content | | Path | Content |
| --- | --- | | --- | --- |
| `Docs/index.md` | Home page with features, requirements, and the cmdlet list | | `Docs/README.md` | Home page with features, requirements, installation, and the cmdlet list; GitHub shows it when you open the `Docs` folder |
| `Docs/Concepts.md` | Background on security descriptors, rights, inheritance, and privileges | | `Docs/Concepts.md` | Background on security descriptors, rights, inheritance, and privileges |
| `Docs/Examples.md` | Task-oriented examples | | `Docs/Examples.md` | Task-oriented examples |
| `Docs/Version-History.md` | Changes in 4.2.6 and earlier |
| `Docs/Cmdlets/*.md` | One reference page per cmdlet, in platyPS format | | `Docs/Cmdlets/*.md` | One reference page per cmdlet, in platyPS format |
| `NTFSSecurity/en-US/NTFSSecurity.dll-Help.xml` | Help file that `Get-Help` shows, generated from `Docs/Cmdlets` | | `NTFSSecurity/en-US/NTFSSecurity.dll-Help.xml` | Help file that `Get-Help` shows, generated from `Docs/Cmdlets` |
| `Docs/Contributing.md`, `Docs/Contributing/*.md` | This contributor guide | | `Docs/Contributing.md`, `Docs/Contributing/*.md` | This contributor guide |
| `mkdocs.yml` | Site settings and navigation |
| `.readthedocs.yml` | Build settings for Read the Docs |
| `README.md` | Front page of the GitHub repository | | `README.md` | Front page of the GitHub repository |
| `CHANGELOG.md` | Changes since 4.2.6 |
When you add a page, add it to the `nav` section of `mkdocs.yml`. When you add a page, link to it from `Docs/README.md` or from a related page,
so that readers can find it.
## Markdown editors ## Markdown editors
@ -59,8 +60,8 @@ Use Windows PowerShell 5.1 for platyPS. In PowerShell 7.4 and later,
platyPS 0.14.2 adds the `-ProgressAction` common parameter to every page. platyPS 0.14.2 adds the `-ProgressAction` common parameter to every page.
For a new cmdlet, create the page, replace every placeholder in it, and add For a new cmdlet, create the page, replace every placeholder in it, and add
the page to `mkdocs.yml`. Replace `Get-NTFSExample` with the name of the new the cmdlet to the cmdlet list in `Docs/README.md`. Replace `Get-NTFSExample`
cmdlet: with the name of the new cmdlet:
```powershell ```powershell
New-MarkdownHelp -Command Get-NTFSExample -OutputFolder .\Docs\Cmdlets New-MarkdownHelp -Command Get-NTFSExample -OutputFolder .\Docs\Cmdlets
@ -75,19 +76,12 @@ again and commit it together with the page:
New-ExternalHelp -Path .\Docs\Cmdlets -OutputPath .\NTFSSecurity\en-US -Force New-ExternalHelp -Path .\Docs\Cmdlets -OutputPath .\NTFSSecurity\en-US -Force
``` ```
## Preview the website ## Preview your change
MkDocs needs Python. Install the MkDocs version that the site is built with GitHub renders the pages with GitHub Flavored Markdown. To preview a page
and start the preview server: before you push it, open it in Visual Studio Code and press **Ctrl+Shift+V**.
In a pull request, the **Files changed** tab shows a changed page rendered
```powershell when you open its menu (**...**) and select **View file**.
pip install -r Docs/requirements.txt
mkdocs serve
```
Open `http://127.0.0.1:8000` in a browser. The preview reloads when you save
a file. Run `mkdocs build --strict` to find broken links and pages that are
missing from the navigation.
## Check your change ## Check your change
@ -132,7 +126,6 @@ workflow for larger changes in [Get started](01-Getting-Started.md).
Read the [Style guide](03-Style-Guide.md). Read the [Style guide](03-Style-Guide.md).
<!-- External URLs --> <!-- External URLs -->
[mkdocs]: https://www.mkdocs.org/user-guide/writing-your-docs/
[platyps]: https://github.com/PowerShell/platyPS [platyps]: https://github.com/PowerShell/platyPS
[label-documentation]: https://github.com/raandree/NTFSSecurity/labels/Documentation [label-documentation]: https://github.com/raandree/NTFSSecurity/labels/Documentation
[label-help-wanted]: https://github.com/raandree/NTFSSecurity/labels/Help%20Wanted [label-help-wanted]: https://github.com/raandree/NTFSSecurity/labels/Help%20Wanted

12
Docs/Contributing/04-Markdown-Specifics.md

@ -13,7 +13,10 @@ the additional rules for the cmdlet reference pages, which platyPS processes.
- Don't use hard tabs or trailing spaces. - Don't use hard tabs or trailing spaces.
- Link to other pages with relative links to the `.md` file, for example - Link to other pages with relative links to the `.md` file, for example
`[Concepts](Concepts.md)` or `[Get-NTFSAccess](Cmdlets/Get-NTFSAccess.md)`. `[Concepts](Concepts.md)` or `[Get-NTFSAccess](Cmdlets/Get-NTFSAccess.md)`.
MkDocs converts them to links to the generated pages. GitHub renders them as links to the pages.
- Link to a section with the anchor that GitHub generates from its heading:
lowercase, with spaces replaced by hyphens and punctuation removed, for
example `[Privileges](Concepts.md#privileges)`.
- End every file with a single newline. - End every file with a single newline.
## Cmdlet reference pages ## Cmdlet reference pages
@ -42,10 +45,3 @@ expects:
add a sentence below each one. add a sentence below each one.
- In RELATED LINKS, write each link on its own line and separate the links - In RELATED LINKS, write each link on its own line and separate the links
with blank lines. with blank lines.
## MkDocs
- The site uses the built-in `readthedocs` theme.
- Every page must be listed in the `nav` section of `mkdocs.yml`.
- Files in `Docs` that aren't Markdown are copied to the website. Exclude
files that don't belong there with `exclude_docs` in `mkdocs.yml`.

33
Docs/index.md → Docs/README.md

@ -38,10 +38,26 @@ Install the module from the
Install-Module -Name NTFSSecurity Install-Module -Name NTFSSecurity
``` ```
You can also download a release from the You can also install a release without the PowerShell Gallery. Download
[releases page](https://github.com/raandree/NTFSSecurity/releases) on GitHub. `NTFSSecurity.zip` from the
If you have trouble, see [releases page](https://github.com/raandree/NTFSSecurity/releases) on GitHub
[How to install](https://github.com/raandree/NTFSSecurity/wiki/How-to-install). and extract it into a module folder. In an elevated session, these commands
install the module for all users of Windows PowerShell 5.1 and PowerShell 7:
```powershell
Unblock-File -Path .\NTFSSecurity.zip
Expand-Archive -Path .\NTFSSecurity.zip -DestinationPath "$env:ProgramFiles\WindowsPowerShell\Modules"
```
`Unblock-File` removes the mark that Windows adds to downloaded files. If you
extract a marked zip file with File Explorer, the extracted files keep the
mark, and the execution policy `RemoteSigned` stops the module from loading.
The zip file contains the folder `NTFSSecurity`. Remove an older copy of that
folder first. To install the module only for yourself, extract it into a
folder of `$env:PSModulePath` in your profile instead, for example
`Documents\WindowsPowerShell\Modules` for Windows PowerShell 5.1 or
`Documents\PowerShell\Modules` for PowerShell 7.
## Getting started ## Getting started
@ -138,10 +154,8 @@ them have changed since; use the cmdlet reference for the current names.
## Version history ## Version history
See the [changelog](https://github.com/raandree/NTFSSecurity/blob/master/CHANGELOG.md) See the [changelog](../CHANGELOG.md) for the changes since 4.2.6 and the
and the [version history](Version-History.md) for 4.2.6 and earlier.
[version history](https://github.com/raandree/NTFSSecurity/wiki/Version-History)
in the wiki.
## Contributing ## Contributing
@ -149,5 +163,4 @@ Contributions are welcome. See the [contributor guide](Contributing.md).
## License ## License
NTFSSecurity is licensed under the NTFSSecurity is licensed under the [MIT license](../LICENSE).
[MIT license](https://github.com/raandree/NTFSSecurity/blob/master/LICENSE).

152
Docs/Version-History.md

@ -0,0 +1,152 @@
# Version history
This page lists the changes in NTFSSecurity 4.2.6 and earlier. It replaces
the version history in the former GitHub wiki. For the changes since 4.2.6,
see the [changelog](../CHANGELOG.md).
## 4.2.5 and 4.2.6
The PowerShell Gallery published 4.2.5 on 2019-07-11 and 4.2.6 on
2019-07-12. The wiki listed no changes for these versions, so this list is
reconstructed from the commit history.
- Removed `Show-NTFSSimpleAccess`, which used Windows Forms, for
compatibility with PowerShell Core.
- Fixed parameter alias definitions that made importing the module fail,
for example in Service Management Automation
([#18](https://github.com/raandree/NTFSSecurity/issues/18),
[#36](https://github.com/raandree/NTFSSecurity/issues/36)).
- Fixed the `ToSimpleFileSystemAccessRule2` method of the access entries
that `Get-NTFSAccess` returns
([#48](https://github.com/raandree/NTFSSecurity/issues/48)).
- Fixed the `ApplyTo` column in the output of `Get-NTFSAccess`.
- Added the MIT license.
## 4.2.4
- Bug fixes.
## 4.2.3
- Added the cmdlet `Get-FileHash2`.
- Bug fixes.
## 4.2.1
- Added the cmdlets `Get-NTFSHardLink`, `New-NTFSHardLink`, and
`New-NTFSSymbolicLink`.
## 4.2
- Added the cmdlets `Move-Item2` and `Copy-Item2`.
- `Remove-Item2`, `Move-Item2`, and `Copy-Item2` now support `-WhatIf` and
`-Confirm`.
## 4.1
- The `-Attributes` parameter of `Get-ChildItem2` works like the one of the
standard cmdlet `Get-ChildItem`, as requested.
- `Remove-NTFSAccess` can now remove access from existing access control
entries. The old behavior is still available with the `-RemoveSpecific`
switch parameter.
## 4.0
- The `*-NTFSAccess` cmdlets can now work on security descriptors to allow
bulk processes.
- Code cleanup for better performance and maintainability.
- Bug fixes.
## 3.2.3
- Fixed a bug in `GetInheritedFrom` that resulted in "Invalid Path" or "Path
not found" errors.
## 3.2
- Bug fixes for managing auditing.
- Fixed various bugs reported on CodePlex.
## 3.1
- All cmdlets have the prefix `NTFS` now. There are aliases for backward
compatibility.
- The new version of `Get-NTFSEffectivePermission` uses `AuthzAccessCheck`
instead of `GetEffectiveRightsFromAcl`.
- The previous `Get-NTFSEffectivePermission` cmdlet has been renamed to
`Get-NTFSEffectivePermissionOld`.
- Added `FileSystemAuditRule2` to the PowerShell formatters.
- Added the `InheritedFrom` information to `FileSystemAuditRule2`.
## 3.0
- This version uses [AlphaFS](https://github.com/alphaleonis/AlphaFS) to
work around the `MAX_PATH` limit of 260 characters.
- New `*-Item2` cmdlets discover items with a long path:
- `Get-ChildItem2` (`dir2`)
- `Get-Item2` (`gi2`)
- `Remove-Item2` (`del2`, `rm2`)
- For inherited access control entries, `InheritedFrom` is displayed.
- Generic access rights are supported.
- Performance improvements.
- Bug fixes.
## 2.4
- `Remove-Access` did not remove deny entries when using the pipeline, for
example `Import-Csv .\access.txt | Remove-Access`.
- `Add-Access` did not remove deny entries when using the pipeline, for
example `Import-Csv .\access.txt | Add-Access`.
- The parameter `-Account` was undiscoverable when using the pipeline.
## 2.3
- The module now makes full use of the Backup, Restore, and Take Ownership
privileges, so as an administrator you can edit permissions on objects
that you don't have explicit access to. Privileges are enabled by default
if the value `EnablePrivileges` is `$true` in `NTFSSecurity.psd1`. The new
cmdlets `Get-Privileges`, `Disable-Privileges`, and `Enable-Privileges`
are for manual control.
- The `-Path` parameter now works consistently.
## 2.1
- Fixed bugs with `Set-Owner`.
- Added support for managing auditing (SACL).
## 2.0 (beta)
- New commands: `Get-SimpleAccess`, `Get-SimpleEffectiveAccess`,
`Show-SimpleAccess`, `Show-SimpleEffectiveAccess`, and `Copy-Access`.
- All cmdlets are now written in C#.
- Fixed a number of bugs.
## 1.3
- Fixed an issue with parameter handling.
- Now works with PowerShell 3.0.
## 1.2
- Fixed some issues with path validation.
- Fixed documentation bugs.
## 1.1
- Fixed the issue with square brackets in paths.
- Performance improvements.
## 1.0
- The last tests didn't reveal any issue. PowerShell has a problem handling
files that have square brackets in the file name, and this module inherits
the issue.
## 0.9 (beta)
- Fixed some bugs.
- Updated documentation.
## 0.8 (beta)
- Initial release.

1
Docs/requirements.txt

@ -1 +0,0 @@
mkdocs==1.6.1

11
README.md

@ -18,9 +18,9 @@ Install-Module -Name NTFSSecurity
``` ```
You can also download a release from the You can also download a release from the
[releases page](https://github.com/raandree/NTFSSecurity/releases). If you [releases page](https://github.com/raandree/NTFSSecurity/releases) and
have trouble, see install it without the PowerShell Gallery; see
[How to install](https://github.com/raandree/NTFSSecurity/wiki/How-to-install). [Installation](Docs/README.md#installation).
The module runs on Windows in Windows PowerShell 5.1 and PowerShell 7. The module runs on Windows in Windows PowerShell 5.1 and PowerShell 7.
@ -43,7 +43,7 @@ Get-ChildItem2 -Path C:\Data -Recurse | Get-NTFSAccess -ExcludeInherited
## Documentation ## Documentation
- [Overview](Docs/index.md): features, requirements, and the list of cmdlets - [Overview](Docs/README.md): features, requirements, and the list of cmdlets
- [Concepts](Docs/Concepts.md): security descriptors, access rights, - [Concepts](Docs/Concepts.md): security descriptors, access rights,
inheritance, privileges, long paths, and module settings inheritance, privileges, long paths, and module settings
- [Examples](Docs/Examples.md): common tasks - [Examples](Docs/Examples.md): common tasks
@ -59,8 +59,7 @@ although some cmdlet names have changed since:
## Version history ## Version history
See [CHANGELOG.md](CHANGELOG.md) for changes since version 4.2.6 and the See [CHANGELOG.md](CHANGELOG.md) for changes since version 4.2.6 and the
[version history](https://github.com/raandree/NTFSSecurity/wiki/Version-History) [version history](Docs/Version-History.md) for 4.2.6 and earlier releases.
in the wiki for earlier releases.
## License ## License

57
mkdocs.yml

@ -1,57 +0,0 @@
copyright: "The NTFSSecurity module is licensed under the <a href='https://github.com/raandree/NTFSSecurity/blob/master/LICENSE'>MIT license</a>."
repo_url: https://github.com/raandree/NTFSSecurity
edit_uri: edit/master/Docs/
nav:
- Home: ./index.md
- Concepts: ./Concepts.md
- Examples: ./Examples.md
- Cmdlets:
- Add-NTFSAccess: Cmdlets/Add-NTFSAccess.md
- Add-NTFSAudit: Cmdlets/Add-NTFSAudit.md
- Clear-NTFSAccess: Cmdlets/Clear-NTFSAccess.md
- Clear-NTFSAudit: Cmdlets/Clear-NTFSAudit.md
- Copy-Item2: Cmdlets/Copy-Item2.md
- Disable-NTFSAccessInheritance: Cmdlets/Disable-NTFSAccessInheritance.md
- Disable-NTFSAuditInheritance: Cmdlets/Disable-NTFSAuditInheritance.md
- Disable-Privileges: Cmdlets/Disable-Privileges.md
- Enable-NTFSAccessInheritance: Cmdlets/Enable-NTFSAccessInheritance.md
- Enable-NTFSAuditInheritance: Cmdlets/Enable-NTFSAuditInheritance.md
- Enable-Privileges: Cmdlets/Enable-Privileges.md
- Get-ChildItem2: Cmdlets/Get-ChildItem2.md
- Get-DiskSpace: Cmdlets/Get-DiskSpace.md
- Get-FileHash2: Cmdlets/Get-FileHash2.md
- Get-Item2: Cmdlets/Get-Item2.md
- Get-NTFSAccess: Cmdlets/Get-NTFSAccess.md
- Get-NTFSAudit: Cmdlets/Get-NTFSAudit.md
- Get-NTFSEffectiveAccess: Cmdlets/Get-NTFSEffectiveAccess.md
- Get-NTFSHardLink: Cmdlets/Get-NTFSHardLink.md
- Get-NTFSInheritance: Cmdlets/Get-NTFSInheritance.md
- Get-NTFSOrphanedAccess: Cmdlets/Get-NTFSOrphanedAccess.md
- Get-NTFSOrphanedAudit: Cmdlets/Get-NTFSOrphanedAudit.md
- Get-NTFSOwner: Cmdlets/Get-NTFSOwner.md
- Get-NTFSSecurityDescriptor: Cmdlets/Get-NTFSSecurityDescriptor.md
- Get-NTFSSimpleAccess: Cmdlets/Get-NTFSSimpleAccess.md
- Get-Privileges: Cmdlets/Get-Privileges.md
- Move-Item2: Cmdlets/Move-Item2.md
- New-NTFSHardLink: Cmdlets/New-NTFSHardLink.md
- New-NTFSSymbolicLink: Cmdlets/New-NTFSSymbolicLink.md
- Remove-Item2: Cmdlets/Remove-Item2.md
- Remove-NTFSAccess: Cmdlets/Remove-NTFSAccess.md
- Remove-NTFSAudit: Cmdlets/Remove-NTFSAudit.md
- Set-NTFSInheritance: Cmdlets/Set-NTFSInheritance.md
- Set-NTFSOwner: Cmdlets/Set-NTFSOwner.md
- Set-NTFSSecurityDescriptor: Cmdlets/Set-NTFSSecurityDescriptor.md
- Test-Path2: Cmdlets/Test-Path2.md
- Contributing:
- Overview: Contributing.md
- Getting Started: Contributing/01-Getting-Started.md
- Writing: Contributing/02-Writing.md
- Style Guide: Contributing/03-Style-Guide.md
- Markdown Specifics: Contributing/04-Markdown-Specifics.md
site_name: NTFSSecurity
site_description: PowerShell module for managing NTFS permissions, auditing, inheritance, and ownership
theme: readthedocs
site_author: Raimund Andrée, James Smith
docs_dir: ./Docs
exclude_docs: |
/requirements.txt
Loading…
Cancel
Save