Every parameter set that is not closed, with the kind of what is left. The
table of all 64 sets, with the status before and after, the new tests of each
(file, line, and name), and what is left, is
[the CSV of this round](Quality-Gate-Test-Round-2026-10-20-ParameterSets.csv).
| Kind | Cmdlet / parameter set | What is left |
| --- | --- | --- |
| MaintainerDecision | `Add-NTFSAccess` / SDSimple | the terminating error of a failing change (a deny entry without rights) is not pinned |
| MaintainerDecision | `Add-NTFSAccess` / SDComplex | the terminating error of a failing descriptor is not pinned |
| MaintainerDecision | `Remove-NTFSAccess` / SDSimple | the terminating error of a failing removal is not pinned |
| MaintainerDecision | `Remove-NTFSAccess` / SDComplex | the terminating error of a failing removal is not pinned |
| MaintainerDecision | `Add-NTFSAudit` / SDSimple | exceptions from the change itself (open item 1 of Handoff 5) |
| MaintainerDecision | `Add-NTFSAudit` / SDComplex | exceptions from the change itself (open item 1 of Handoff 5) |
| MaintainerDecision | `Remove-NTFSAudit` / SDComplex | exceptions from the change itself (open item 1 of Handoff 5) |
| would-pin | `Get-NTFSAccess` / Path | the category of the `ReadSecurityError` after a failed ownership retry (WriteError there, OpenError from the generic catch) is not asserted, so as not to cement the inconsistency |
| would-pin | `Get-NTFSOrphanedAccess` / Path | the choice of a warning, not an error, for a read failure other than access denied |
| would-pin | `Set-NTFSSecurityDescriptor` / all sets | positional binding at Position 2 (the sibling cmdlets use Position 1), an undecided inconsistency |
| Limit | `Get-NTFSAccess` / SD | no failing descriptor is tested for this set (no per-item handler) |
| Limit | `Get-NTFSSimpleAccess` / SD | no failing descriptor is tested for this set (no per-item handler) |
| Limit | `Get-NTFSEffectiveAccess` / Path | the `ReadEffectivePermissionError` handler is unreachable (the library records the failure); remote and group-based results need the lab (the live tests cover them) |
| Limit | `Get-NTFSEffectiveAccess` / SecurityDescriptor | a mix of a failing and a succeeding descriptor in one call |
| Limit | `Add-NTFSAudit` / PathComplex | the owner retry after access denied needs a lab or a remote server |
| Limit | `Remove-NTFSAudit` / PathComplex | the owner retry after access denied needs a lab or a remote server |
| Limit | `Clear-NTFSAudit` / Path | the owner retry after access denied needs a lab or a remote server |
| Limit | `Get-NTFSAudit` / Path | the PermissionDenied category branch of `ReadSecurityError` |
| Limit | `Disable-NTFSAuditInheritance` / Path | a successful ownership retry or `RestoreOwnerError` of a SACL write needs a lab or a remote server |
| Limit | `Enable-NTFSAuditInheritance` / Path | a successful ownership retry or `RestoreOwnerError` of a SACL write needs a lab or a remote server |
| Limit | `Get-NTFSInheritance` / Path | a successful ownership-retry read needs a lab or a remote server |
| Limit | `Get-NTFSSecurityDescriptor` / all sets | a successful ownership-retry read needs a lab or a remote server |
| Limit | `Get-FileHash2` / all sets | the success path of the ownership retry (elevated only; the DACL and owner that give it can't be built in a sandbox) |
| Limit | `Get-NTFSHardLink` / all sets | the `UnauthorizedAccessException` handler is structurally unreachable (Windows lists hard-link names without opening the file) |
| Limit | `Disable-Privileges` / all sets | the warning when a privilege cannot be disabled needs a race with another command |
| Limit | `Get-Privileges` / all sets | the `Removed` value of `PrivilegeState` is unreachable: a removed privilege leaves the list of the token instead of showing the value (a probe before and after confirmed it) |
The 7 decisions and the 3 pins are the maintainer's, as in the report of
Handoff 5; nothing here decides them. The dot patterns of
`Get-ChildItem2 -Filter` are also still his (the row is closed because its
plain gaps are tested, not because the patterns are decided). The "ownership
retry" limits are the paths that run when a cmdlet has to take an owner to read
or write a security descriptor. The report of Handoff 5 explains why no unit
test reaches them (and lists `AUDIT-OWNER-RETRY` as open), so they stay
explained, not tested.
## What the tests showed
- **No defect.** The four implementers found no behavior that contradicts the
cmdlet page or common sense, and their `defects` folders are empty.
- **`Get-Privileges` and `Removed`.** The `Removed` value of `PrivilegeState`
can't appear in the output: after a privilege is removed from a token, the
token's list no longer has it. A probe before and after showed it. The row
is a limit, not a test gap.
- **`Move-Item2 -Force` onto a non-empty folder replaces it**, with no merge and
no error. `Docs/Cmdlets/Move-Item2.md` documents the replace, and the new test
pins it.
- **Four expectations were wrong at first and were corrected in the tests**,
none of them a defect:
-`Get-NTFSOrphanedAudit` without the Security privilege reports the category
`OpenError`, as `Get-NTFSAudit` does, not `PermissionDenied` (that category
is the limit above).
- After `Disable-NTFSAuditInheritance` without `-RemoveInheritedAuditRules`
and a plain enable, an item has two audit entries, not one: the disable
copies the inherited entry into the SACL as an explicit one, and the cmdlet
page says so.
-`-PassThru` of `Copy-Item2` and `Move-Item2` is a `Boolean` that needs a
value, not a switch, as their pages say.
- The access-denied test of `Remove-Item2` needs a deny entry on the parent
folder (`DeleteSubdirectoriesAndFiles`) and one on the file (`Delete`),
because NTFS grants a delete through either.
- **A defect of my helper script, not of the module.** The inheritance
implementer reported that its basic-user runs stalled for about 30 minutes,
twice, and took it for an effect of the load of four agents at once; another
group's job stuck the same way. The cause was the helper that runs the
configurations of a batch: a test-name filter with spaces did not survive the
nested quotes of `runas`, the child never started, and the helper waited for
its whole timeout. The filter now travels as base64, and the helper gives up
after a minute without a runner. The suite numbers above come from the run of
the four CI configurations, which takes no name filter and did not stall.
lists its files with size and SHA-256; the four worktrees of the implementers
are not in it. The commits of the batches are `7c3de81` (audit), `472003e`
(access), `e32e36a` and `9a2a809` (items), and `404ceca` (inheritance) of the
branch `ai/tests-round-1`.
| Path in `E` | Content |
| --- | --- |
| `round1\IMPLEMENTER-BRIEF.md`, `round1\worklist-*.md` | the brief of the implementers and the four worklists (the rows with their remaining items, reasons, and key tests) |
| `round1\reports\report-*.md` | the final reports of the four implementers, verbatim, with the counts, the negative checks, and the follow-up on the three unflipped rows of the items batch |
| `round1\<group>\commit-diff.txt`, `source-pin.txt` | the diff of the access, inheritance, and items batches (the audit batch has none) and, for each group, the commit that its worktree started from (`715c254`) |
| `round1\suite\rc8suite-20261020-093109` | the last run of the four CI configurations before the round (1,494 cases per configuration) |
| `round1\suite\round1-three-20261020-141224`, `round1\suite\round1-four-20261020-142909` | the runs with three and with all four batches (1,590 and 1,615 cases), each with the NUnit file, the log, and the summary of the four configurations |
| `round1\suite\delta-four-vs-baseline.txt` | the output of `Measure-RoundSuiteDelta.ps1`: the new cases per file and configuration, and the 30 and 1 that skip |
| `round1\suite\runner-39551726767` | the CI run of #129 on the GitHub runner: the log of the job `Build and test`, the four NUnit files of the artifact `test-results`, and the output of `Measure-RoundSuiteDelta.ps1` for them (GitHub deletes logs and artifacts after its retention period) |
| `round1\tables-draft` | the draft of the ParameterSets CSV |
| `scripts` | `Build-Worklists.ps1`, `Build-RoundTables.ps1` (the CSV of this round), `Invoke-RoundJob.ps1`, `Invoke-Build.ps1`, `Run-FocusedPester.ps1`, `Start-FocusedRuns.ps1` (the helper with the quoting defect, fixed), `Run-FullSuite.ps1`, `Run-CiConfiguration.ps1`, `Measure-RoundSuiteDelta.ps1` |