9.2 KiB
| status | last-verified | owner | source |
|---|---|---|---|
| current | 2026-10-04 | active-agent | repository evidence |
Progress
Current status
PRs #91 to #98 are merged. CI published the prerelease 5.0.0-rc1 from
master (e0f5366, tag 5.0.0-rc1) to the PowerShell Gallery and GitHub;
the stable Gallery version is still 4.2.6. CI runs on GitHub Actions:
build, docs checks, tests in Windows PowerShell 5.1 and PowerShell 7,
packages, the wiki generated from Docs (43 pages), and releases on a
version tag (Decision 12). Next: the maintainer tests 5.0.0-rc1.
Recent milestones
- 2026-10-02: Memory Bank initialized. PR #91 aligned the documentation
with the code (36 cmdlet pages, conceptual pages, README,
mkdocs.yml,.readthedocs.yml,CHANGELOG.md) and madeappveyor.ymlbuild the module and check the docs against that build (Decision 6); squash-merged as690d8dd. - 2026-10-02: PR #83 (TechNet links) closed by the maintainer as superseded by #91.
- 2026-10-04: Work package 1 merged as PR #92 with a merge commit
(
d917832):promptHistory.mdignored, Decision 7, Decisions moved todecisions/. - 2026-10-04: Work package 2 squash-merged as PR #93 (
14799fb): generated help file shipped (Decision 8), stale help files removed,FileListcomplete,Tests\Help.Tests.ps1(218 Pester tests), CI steps 03 (help file current) and 04 (Pester, one Tests-tab entry per test; the NUnit upload had listed 870), six cmdlet-page links reworded for the help text. AppVeyor passed 218 of 218 on the PR (54834295) and onmaster(54834350). - 2026-10-04: Work packages 3 (#94,
bde59a5), 4 (#95,6665825), and the move to GitHub Actions (#96,4f9f7cc) merged with merge commits: Read the Docs dropped (Decision 9), version 5.0.0 with a valid manifest (Decision 10), CI and a wiki generated fromDocson GitHub Actions (Decision 11). The firstmasterrun (37218869672) passed and published the wiki (62ec94a, 43 pages). - 2026-10-04: The maintainer kept the version history separate from
CHANGELOG.mdand had it completed from the six PowerShell Gallery packages and the commit history (#97,59663c9): release dates, notes for 4.2.2, detailed notes for 4.2.4, and separate notes for 4.2.5 and 4.2.6. The wiki republished it. - 2026-10-04: The maintainer chose to release 5.0.0 next, through CI and a
prerelease first (Decision 12):
ai/release-5.0.0adds thereleasejob,Get-ReleaseInfo.ps1,New-ModulePackage.ps1,Tests\Release.Tests.ps1, the labelrc1, andDocs/Contributing/05-Releasing.md. The package dry run found that PSResourceGet drops the command tags that 4.2.6 had; the script adds them back. - 2026-10-04: #98 merged (
e0f5366); the tag5.0.0-rc1ran the release job (run 37230802387), which published to the Gallery at 20:12 UTC and created the GitHub prerelease. Verified: the Gallery nupkg is byte-identical to the CI artifact, the GitHub zip to the CI zip; the DLLs are optimized Release builds; the Gallery shows the prerelease flag, the release notes link, and 85 tags (36PSCmdlet_, 36PSCommand_,PSIncludes_Cmdlet, plusPSEdition_CoreandPSEdition_Desktop, which the Gallery adds itself); stable search still returns 4.2.6. Installed withSave-PSResource, the module passes the full suite (Windows PowerShell 261 passed and 7 skipped, PowerShell 7 232 passed and 36 skipped). The command search still returned 4.2.6 minutes after publishing, because the search index lagged.
Stable capabilities
- 36 cmdlets: access (7), audit (5), inheritance (6), owner and security descriptor (4), privileges (3), long-path items (6), links, hash, and disk space (5).
- Works in Windows PowerShell 5.1 and PowerShell 7 (smoke-tested), except
Get-FileHash2, which fails in PowerShell 7 (missingRIPEMD160type).
Open work
Work packages in the order agreed with the maintainer. Each gets one
ai/<slug> branch and PR, committed locally. The maintainer pushes and
opens the PR (the agent can't; see techContext.md, Constraints), and the
next package starts only after the maintainer's go-ahead.
- Housekeeping: done (#92).
- Ship help: done (#93).
- Docs on GitHub: done (#94).
- Manifest and version 5.0.0: done (#95).
4b. CI and the wiki on GitHub Actions: done (#96). Left to the maintainer:
revoke AppVeyor's GitHub access if it is still granted, consider
Restrict editing to collaborators only for the wiki, and optionally
ask
Sup3rlativ3to delete the Read the Docs project. 4c. Version history from the PowerShell Gallery: done (#97). 4d. Release 5.0.0 through CI (Decision 12): 5.0.0-rc1 published and verified (#98). Next: the maintainer tests the prerelease; recheckFind-PSResource -CommandName Get-NTFSAccess -Prerelease, which should list 5.0.0-rc1 once the Gallery index catches up. For the final release: remove the label, rename[Unreleased]to[5.0.0]with the date, and tag5.0.0(steps inDocs/Contributing/05-Releasing.md). Consider changing the manifestDescription, which says "Windows PowerShell Module", before the final release. Releases no longer come from a local build, so the old manual steps (cleaningC:\Program Files\WindowsPowerShell\Modules\NTFSSecurity, Debug builds) no longer apply. - Code defects, listed below:
review: on, one PR per group, regression test first. Pester 5 tests importNTFSSecurity\bin\Release, run in a$env:TEMPsandbox and in the CI workflow (pattern:Tests\Help.Tests.ps1), and skip elevated cases when not elevated; check whether the GitHub Actions Windows runner runs elevated. Each fix updates its cmdlet page andCHANGELOG.md.
Code defects (work package 5)
Numbered as agreed with the maintainer; each is documented on its page.
A: Crashes and wrong results
- (1)
Set-NTFSInheritancereads an unsetNullable<bool>when-AccessInheritanceEnabledis omitted; omitted should mean unchanged. - (2)
Get-ChildItem2casts a file-PathtoDirectoryInfo(InvalidCastException). - (3)
Get-FileHash2returns at a folder in-Pathand skips the rest. - (4)
Get-NTFSAuditre-emits the previous item's entries after a failed path, and returns nothing without the Security privilege instead of an error. - (5)
Add-NTFSAudit:-Accountand-AccessRightsshare position 2; use 2 and 3 likeRemove-NTFSAudit. - (6)
-PassThrureturns access entries inAdd-NTFSAuditSD sets andRemove-NTFSAuditPath sets. - (7)
FileSystemAuditRule2.GetFileSystemAuditRulestakesInheritanceEnabledfromAreAccessRulesProtected. - (8)
Get-NTFSInheritance -SecurityDescriptorreportsAuditInheritanceEnabled = $truewithout a SACL (Path set:$null). - (9)
Get-NTFSOwner: the access-denied retry repeats the failing call, and the catch-all turnsPipelineStoppedExceptionintoReadSecurityError. - (10)
Copy-Item2fails on a folder with files (DirectoryNotFoundException). - (11)
Disable-Privilegeshits a nullprivilegesfield whenEnablePrivileges = $false. - (12) The six inheritance cmdlets enable privileges unconditionally in
BeginProcessingand leave them enabled. - (13) Format view
Children2: theInheritscolumn usesIsInheritanceBlocked, so it always showsTrueforGet-ChildItem2.
B: Ignored parameters and parameter sets
- (14) SD sets of
Add-/Remove-NTFSAccessandAdd-/Remove-NTFSAuditcannot resolve without-AppliesToor the flag parameters. - (15)
Get-NTFSEffectiveAccess:-ExcludeNoneAccessEntrieshas no effect, there is no output without-Path, and the SD set returns nothing. - (16)
Get-NTFSOrphanedAccess,Get-NTFSOrphanedAudit, andGet-NTFSSimpleAccessignore-Accountand-SecurityDescriptor;Get-NTFSOrphanedAuditwrites collections;SimpleFileSystemAccessRulehas no format view. - (17)
removeSpecificinRemove-NTFSAccess/Auditis never bound;Remove-NTFSAuditleavesappliesTouninitialized.
C: Error handling
- (18)
Copy-Item2,Move-Item2,Remove-Item2: one failing path skips the rest of-Path(returninstead ofcontinue). - (19)
Remove-NTFSAccesscontinues after a failed read and writes a second, misleadingRemoveAceError. - (20) The inheritance cmdlets write
-PassThruoutput infinally, even after a failure. - (21)
New-NTFSHardLinksays the target path exists when it doesn't.
D: Metadata and cosmetics
- (22) Wrong or missing
[OutputType](Test-Path2,Get-FileHash2,Add-NTFSAudit,*-Item2, inheritance cmdlets);Enable-/Disable-Privileges -PassThruwrites one collection;New-NTFSSymbolicLink -PassThrureturnsFileInfofor folder links. - (23) Typos: "Privliege" in the
Get-NTFSEffectiveAccesswarning; "are now enabled" in theDisable-Privilegesverbose message. - (24) Dead code in
RemoveItem2.csandOtherCmdlets.cs.
E: Maintainer decisions before changing behavior
Clear-NTFSAccess -DisableInheritancediscards inherited entries: keep that, or copy them?Set-NTFSInheritancedefaults are the opposite of the dedicated inheritance cmdlets: align?- The audit inheritance switches are named
*AccessRules: add*AuditRulesaliases? Get-FileHash2fails in PowerShell 7 (RIPEMD160): drop the algorithm there, load it lazily, or deprecate the cmdlet?