@ -9,95 +9,70 @@ source: current task evidence
## Current focus
## Current focus
Phase 2 of the quality gate before 5.0.0 (Decision 21), on the branch
Phase 2 of the quality gate before 5.0.0 (Decision 21) is complete on the
`ai/release-5.0.0-rc6` , released as 5.0.0-rc6: tests until every code
local branch `ai/release-5.0.0-rc6` , candidate `7b0781f` . The maintainer
path is tested or explained, live tests for the remaining cmdlets, and
pushes the branch, merges the pull request after CI, and tags 5.0.0-rc6.
test-first fixes of the known defects. The maintainer approved it on
Then Phase 3 (live tests on more operating systems) and 5.0.0; after
2026-10-08. Then Phase 3 and 5.0.0; after 5.0.0 the repository is archived
5.0.0 the repository is archived in favor of WindowsAccessControl
in favor of WindowsAccessControl (Decision 18).
(Decision 18).
## Evidence
## Evidence
- 2026-10-08, Phase 1, measured on 5.0.0-rc5 (`fcb370e`):
- 2026-10-08, Phase 2 on `ai/release-5.0.0-rc6` , 31 commits on `fcb370e`
- The published package passes the live tests in both editions: 8 role
(5.0.0-rc5); the candidate is `7b0781f` :
runs, no failure.
- The suite has 684 tests. Elevated: 662 passed and 22 skipped in
- As a basic user, the 11 tests that CI skips pass in both editions. The
Windows PowerShell 5.1, 632 and 52 in PowerShell 7. As a basic user
one failure, `Enable-Privileges should write one object per
through `Invoke-TestsAsBasicUser.ps1` : 590 and 94, 560 and 124. No
privilege`, assumes more than one privilege. Every test runs in at
failure, and no test is skipped in all four configurations; CI runs
least one of four configurations (elevated or basic user, two
all four since this branch.
editions), but CI runs only elevated.
- C# coverage of all four configurations (AltCover without `--save` ,
- The suite runs 55.9% of the C# lines and 37.4% of the branches
`techContext.md` ): 68.1% of the lines and 44.3% of the branches on
(`techContext.md`, Validation). No line of `Test-Path2` and
`1b9edbb` ; rc5 58.1% and 38.0%. The earlier figures counted one of
`Get-DiskSpace` runs; `Set-NTFSOwner` (46%) runs only as a setup step
the four runs. Of the 972 points that no test ran at `e2b6b24`
of another test; `Clear-NTFSAccess` and the access inheritance cmdlets
(without the classes that no cmdlet calls), 400 are code that nothing
run about 43%, `FileSystemSecurity2` 42%. No cmdlet calls the registry
calls, 107 defensive guards, 74 need a failure of Windows, 4 need the
classes, `SimpleFileSystemAuditRule` , `PrivilegeEnabler` , or
lab, and 387 are reachable; 51 of those ran in runs that the first
`FileSystemEffectivePermissionEntry` (244 lines).
measurement missed, and the top items of the rest are in
- 19 of the 36 cmdlets never ran over SMB, among them `Get-NTFSOwner` ,
`progress.md` , open work 7.
`Set-NTFSOwner` , the audit inheritance cmdlets, and `Clear-NTFSAudit` ;
- Fixed test-first: `Get-NTFSSimpleAccess` (`ReadData`, the parent of a
no account of another domain or forest ran; both ends of the lab run
relative path); `Copy-Item2` and `Move-Item2` (a folder at the
Windows Server 2025.
destination, the missing destination folder of #21 , also with
- Known defects from the reviews of #113 and #114 (`progress.md`, open
`-WhatIf` ); the hard-link cmdlets on shares and at folders;
work 3): `Move-Item2 -PassThru` returns the source item; the conflict
`Set-NTFSSecurityDescriptor -PassThru` (R5); the error ID of
checks of `Copy-Item2` and `Move-Item2` use `File.Exists` also for
`Get-NTFSOrphanedAccess` ; relative paths that start with a dot, which
folders, maybe the cause of #21 ; an error while restoring the owner can
every cmdlet shortened by two characters (`Remove-Item2 .x` removed
hide the original one (R4); `Set-NTFSSecurityDescriptor -PassThru` reads
another item); comparing entries and descriptors
the item again inside the retry (R5); the access check doesn't read
(`InvalidCastException`, also `Compare-Object` in PowerShell 7) and
`AUTHZ_ACCESS_REPLY.Error` , and its buffers aren't initialized. #110
their conversions; `InheritedFrom` with `-ExcludeExplicit` and for a
lists seven test follow-ups.
descriptor with audit entries (`ArgumentOutOfRangeException`).
- #34: no reply from the tester by 06:44 UTC on 2026-10-08.
`Copy-Item2` no longer creates the missing folders of a destination
- Phase 2, step 1, first part (2026-10-08, commits `82969ba` to
for a folder (assumption, flagged for the maintainer).
`ff74100` ): 34 new tests for `Set-NTFSOwner` , `Test-Path2` , and
- Live tests: cases 4b to 9 and accounts of `b.forest1.net` ,
`Get-DiskSpace` , and two defects found and fixed test-first. Every
`forest2.net` , and `forest3.net` . The lab acceptance passed for
cmdlet that enables privileges left the Backup, Restore, Take Ownership,
`acfe3af` , `1b9edbb` , and `7b0781f` (326 tests each, none failed;
and Security privileges enabled in the session when a later command or a
`Tests/Lab/Acceptance-2026-10-08-5.0.0-rc6.md` ). Baseline: the
terminating error stopped the pipeline; `Test-Path2` stopped with
published 5.0.0-rc5 fails only the two hard-link tests of case 8. The
"Illegal characters in path" in Windows PowerShell for a path such as
fixture was removed and the removal checked after each run; three
`C:\a|b` .
checkpoints `ntfs-rc6-*-before-acceptance` stay on six machines.
- Phase 2, step 1, link cmdlets (2026-10-08, `4d5c8c4` , `09eb337` ): 18 new
- `Get-NTFSEffectiveAccess -ServerName` needs administrators or
tests for `New-NTFSHardLink` , `Get-NTFSHardLink` , and
Access Control Assistance Operators on the named computer (lab probe,
`New-NTFSSymbolicLink` pass elevated and as a basic user in both
documented).
editions; no code defect. The page of `New-NTFSSymbolicLink` was wrong
- Two `security-reviewer` passes approved the branch with no Blocker or
twice: `-PassThru` returns a folder object for a link to a folder since
Major finding: `fcb370e..e2b6b24` (findings 1, 4, 5, 10 fixed in
5.0.0, and Windows Developer Mode doesn't help, because AlphaFS 2.2.1
`acfe3af` ) and `e2b6b24..1b9edbb` (findings 1, 2, 6, 7 fixed in
passes only the File or Directory flag to `CreateSymbolicLinkW` . Lab
`7b0781f` ). Not fixed: a failed privilege disable isn't tried again,
check on `F1AFile1` as `NtfsLiveServerAdmin` (no administrator):
and a non-qualified ACE could shift `InheritedFrom` (neither
with Developer Mode on, `mklink` created a link and the cmdlet of
reproducible); `New-NTFSHardLink` stays terminating for a folder (a
5.0.0-rc5 failed with error 1314; the setting was restored.
behavior change for the maintainer).
- Security review of `fcb370e..00c3646` (`security-reviewer`, 2026-10-08):
- #34: no reply from the tester since 2026-10-06.
the `Dispose` approach is sound; two Major findings, both one root cause
that 4.2.6 already had: the privilege cleanup decided on the states read
in `BeginProcessing` and stopped at the first failure. Reproduced: a
privilege that another command in the pipeline disabled left the others
enabled (silently after an early stop), and
`Get-NTFSOwner ... | ForEach-Object { Disable-Privileges; $_ }` stopped
with "Priviledge already disabled". Two Minor findings: the early-stop
tests could pass vacuously, and `Test-Path2` gave no reason for `$false` .
The maintainer chose to fix all four; fixed test-first in `578042f` and
`b241441` . The suite (555 tests) passes elevated in both editions
(534/0/21 and 504/0/51), and the changed test files pass as a basic user.
## Next step
## Next step
Phase 2, one step at a time, each with evidence before the next:
1. The maintainer pushes the branch, opens the pull request, merges it
after CI, and tags `5.0.0-rc6` ; then the live tests run against the
1. Tests for the cmdlets without tests of their own: done for
published package (`-Version 5.0.0-rc6`). The first CI run is the first
`Set-NTFSOwner` , `Test-Path2` , `Get-DiskSpace` , and the link cmdlets;
run of `Invoke-TestsAsBasicUser.ps1` on a GitHub runner.
open for `Get-NTFSOrphanedAudit` and `Get-NTFSSimpleAccess` .
2. The maintainer decides the behavior changes in `progress.md` , open
2. The other parameter sets and error paths, such as the
work 4 (Decision 16), and the scope of Phase 3: the operating systems,
`-SecurityDescriptor` sets of the inheritance cmdlets and of
the code that nothing calls, and file servers that aren't Windows
`Clear-NTFSAccess` .
(#34).
3. The paths of `Security2` that no test runs, and #110 .
4. Test-first fixes of the known defects; behavior changes go to the
maintainer (Decision 16).
5. A CI job as a basic user, live tests for the other cmdlets over SMB and
for accounts of other forests, and a lab run.
6. Measure the coverage again, explain what remains, review, and prepare
5.0.0-rc6. The final review covers the whole branch, including the fix
round of `578042f` and `b241441` .
Open question for the maintainer, not planned: `New-NTFSSymbolicLink`
could request unprivileged creation with
`SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE` , so that Developer Mode
works. That is a behavior change (Decision 16) and needs a fallback for
Windows versions before 10 1703, which don't know the flag.