Browse Source

docs(coverage): drop four environments from scope and record the AppliesTo cause

The maintainer decided on 2026-10-11 that Server Core, ARM64, a localized
operating system, and non-Windows file servers are not needed by the audience
of the tool. They leave the open items, the completion matrix, and the limits
of the report, and Decision 25 records the choice (Decision 23 and #34 are not
changed).

Open item 3 of the report now gives the cause of the dropped AppliesTo for a
path: the default parameter set PathComplex wins when a piped object satisfies
its mandatory parameters. A stand-alone model with the four sets and no default
binds PathSimple for an object with AppliesTo and keeps every named call; the
real cmdlets were not changed. debugging-insights.md keeps the lesson.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
pull/125/head
Raimund Andree 3 weeks ago
parent
commit
21188b1c3e
  1. 9
      .memory-bank/activeContext.md
  2. 11
      .memory-bank/debugging-insights.md
  3. 18
      .memory-bank/decisions/0025-out-of-scope-environments.md
  4. 5
      .memory-bank/progress.md
  5. 4
      .memory-bank/systemPatterns.md
  6. 127
      Tests/Coverage/Quality-Gate-Unknowns-2026-10-10.md

9
.memory-bank/activeContext.md

@ -138,8 +138,8 @@ acceptance is the maintainer's.
that build; the 22 files of the matrix suite 1,156/0 in 16 configurations
on `OSFile19/22/25` and `OSWin11`; both labs clean at 00:43Z. The tool's
branch summary percentage is not read (it adds a point per method); the
explicit branch points are 1,090/1,168. Not tested: Server Core (plan),
ARM64, a localized system, non-Windows servers.
explicit branch points are 1,090/1,168. Server Core, ARM64, a localized
system, and non-Windows servers are out of scope (Decision 25).
- Raw evidence is outside git: the session folder
`4b12e2f4-d4c7-4a5d-883a-ddb7421c4848\files` (`qg-paths`, the matrix runs, the
night log) and
@ -183,6 +183,7 @@ acceptance is the maintainer's.
candidate (rc8), which needs the matrix cells and the first lab on its
bytes, and he decides the open items of the report: hard-link names under
another root (a defect with a reproduction), a piped `AppliesTo` property
that a path drops, 12 getters of pipeline parameters, the 51 partly closed
sets, the audit paths, Server Core (widens Decision 24), and ARM64.
that a path drops (cause: the default set; the report has a model of the
fix), 12 getters of pipeline parameters, the 51 partly closed sets, and the
audit paths.
7. Do not release stable 5.0.0 or equate a percentage with gate closure.

11
.memory-bank/debugging-insights.md

@ -50,3 +50,14 @@ fails without it (Decision 16).
`SDSimple`. A test that means the Simple set names `-AppliesTo` and asserts
the scope it gets (a probe that tells the sets uses an entry of the default
scope: removing `ThisFolderOnly` from it leaves the `InheritOnly` part).
- The cause is `DefaultParameterSetName = "PathComplex"`: when a piped object
satisfies the mandatory parameters of the default set, PowerShell settles on
it and never tries a parameter that belongs to another set. A stand-alone
model with the four sets and no default binds `PathSimple` for an object with
`AppliesTo`, `PathComplex` for one without, and an error for one with
`AppliesTo` and `InheritanceFlags`; named calls resolve as before
(`probes\p-parameterset-binding*.ps1` in the Handoff 5 evidence). The default
dates from 4.2.6, when `AppliesTo` was optional; `4b1abc9` made it mandatory
in the Simple sets, so the default no longer decides a named call. Build a
model of the parameter sets before you change an attribute, and test the real
cmdlet afterwards.

18
.memory-bank/decisions/0025-out-of-scope-environments.md

@ -0,0 +1,18 @@
---
status: accepted
date: 2026-10-11
last-verified: 2026-10-11
owner: shared
source: maintainer decision of 2026-10-11
---
# Decision 25: Four environments are out of scope for the tests and the acceptance
- Choice: The tests and the acceptance of the quality gate do not cover
Windows Server Core, ARM64, a localized operating system, or file servers
that are not Windows servers. They are not open items, and no agent plans,
deploys, or tests them (maintainer, 2026-10-11).
- Rationale: The audience of the tool does not need them (maintainer).
- Not changed: Decision 23 and #34, the question of what to do for reporters
with non-Windows file servers, stay as they are until the maintainer says
otherwise.

5
.memory-bank/progress.md

@ -109,7 +109,7 @@ After 5.0.0, archive in favor of WindowsAccessControl (Decision 18).
rule of the paths report corrected; the first lab accepted on the fixed
builds and the matrix suite passing on Windows Server 2019, 2022, 2025 and
Windows 11 (1,156 cases, 16 configurations). Open: hard-link names under
another root, a piped `AppliesTo` for a path, Server Core, ARM64. Report:
another root, a piped `AppliesTo` for a path. Report:
`Tests/Coverage/Quality-Gate-Unknowns-2026-10-10.md`.
## Stable capabilities
@ -142,8 +142,7 @@ After 5.0.0, archive in favor of WindowsAccessControl (Decision 18).
4. Architecture/cmdlet design: Decision 22 remains proposed; two link
changes are breaking. Keep unused classes/helper overloads until a
maintainer decision; do not remove them to improve coverage percentages.
5. ARM64 workstation: PowerShell 7.6.1 crashed under x64 emulation without
module frames; native-x64 CI did not reproduce it.
5. ARM64 workstation: out of scope (maintainer, 2026-10-11, Decision 25).
6. Optional maintainer cleanup: obsolete AppVeyor/Read the Docs access,
wiki editing restrictions, `test/transfer`, and old lab checkpoints
when no longer needed. No remote changes or snapshot restores here.

4
.memory-bank/systemPatterns.md

@ -49,6 +49,7 @@ Read only task-relevant records; the index controls routing.
| 22 | [The behavior changes of Phase 2 (proposed)](decisions/0022-phase-2-behavior-changes.md) |
| 23 | [Non-Windows file servers before 5.0.0, #34 (proposed)](decisions/0023-non-windows-file-servers.md) |
| 24 | [The operating-system matrix lab (proposed)](decisions/0024-os-matrix-lab.md) |
| 25 | [Four environments are out of scope for the tests](decisions/0025-out-of-scope-environments.md) |
## Patterns
@ -70,8 +71,7 @@ Read only task-relevant records; the index controls routing.
through a Write call (`IsFromLaterCommand`, `PipelineControl`; see
`BaseCmdlets.cs`); add a row to `Tests/PipelineControl.Tests.ps1` for a new
cmdlet. Record an enabled privilege before the next write.
- `Get-ChildItem2 -Filter`: AlphaFS, then a wildcard on the name, both culture
invariant (`debugging-insights.md`); `*.*` means `*`, dot rules are open.
- `Get-ChildItem2 -Filter` matches culture invariant; `*.*` means `*`.
### Tests and documentation

127
Tests/Coverage/Quality-Gate-Unknowns-2026-10-10.md

@ -54,8 +54,10 @@ is open.
Minor ones; each was resolved, three of the Major ones after a probe (the
claim about `-eq` was wrong, the filter defect was real, the audit tests of a
piped `AppliesTo` did not bind the set that they named).
- **Environments.** `de-DE` and `tr-TR` are tested; Server Core has a plan;
ARM64, a localized system, and non-Windows servers stay open.
- **Environments.** `de-DE` and `tr-TR` are tested. Server Core, ARM64, a
localized operating system, and non-Windows file servers are out of scope:
the maintainer decided on 2026-10-11 that the audience of the tool does not
need them (decision 22 below, Memory Bank Decision 25).
## Tables
@ -930,69 +932,24 @@ both editions, in `tr-TR` and in `en-US` (`E\probes\review-final4-*.txt`), and
the test passes in the four configurations (`E\tdd2\green3`: 200 cases of three
files, elevated and as a basic user).
Not tested: a localized operating system (no such image exists: the ISO files
are English), the names of built-in accounts in other languages, and the
localized texts of Windows errors. The review found one test that depends on a
localized text, the comparison of `Get-Privileges` with the State column of
`whoami /priv` in `ParameterSets.Items.Tests.ps1`; it compares the state now
only where `whoami` prints the English words.
### Server Core
Not deployed: a new machine widens the proposed Decision 24, and the
maintainer's word is needed. The plan, with numbers measured on this host
where they exist:
- **Image.** `en-us_windows_server_2025_updated_april_2026_x64_dvd_225d826d.iso`
(the ISO of `OSFile25`), index 3, `Windows Server 2025 Datacenter` (the
Server Core installation; index 4 is the Desktop Experience installation that
every matrix machine uses). The WIM image is 10.9 GB, against 23.6 GB for the
Desktop Experience.
- **Disk.** The base image of the Desktop Experience of the same system is
14.5 GB on `V:` and its differencing disk 3.6 GB after the runs; a Core
base image is expected at 8 to 10 GB (an estimate from the ratio of the WIM
images) and a differencing disk at about 3 GB. `V:` has 191 GB free of 991.9
GB, so the machine costs about 12 GB.
- **Time.** The estimate is under an hour for the machine (the base image, the
unattended installation, and the start; `Add-OsMatrixMachine.ps1` allows 40
minutes for the start) plus a few minutes for the tools, and 10 to 15 minutes
for a cell, like the other cells. It was not measured.
- **Commands.** In an elevated Windows PowerShell 5.1 on the host, in this
order, never together with a controller or another `Import-Lab`:
```powershell
.\Tests\Lab\Acceptance\Add-OsMatrixMachine.ps1 -LogPath $env:TEMP\add-oscore25.log `
-Name OSCore25 -OperatingSystem 'Windows Server 2025 Datacenter' `
-IpAddress 192.168.12.26
.\Tests\Lab\Acceptance\Complete-OsMatrixLab.ps1 -LogPath $env:TEMP\complete-oscore25.log `
-Member OSCore25
```
Then, with the extracted candidate folder as `<module>`:
```powershell
.\Tests\Lab\Acceptance\Run-MatrixLocalSuite.ps1 -Label core1 -Machine OSCore25 `
-ModulePath <module> -OutputRoot <folder> -Mode Elevated,Basic
.\Tests\Lab\Acceptance\Run-MatrixSequence.ps1 -Label core1 -FileServer OSCore25 `
-ModulePath <module> -OutputRoot <folder> `
-Machines OSFile19,OSFile22,OSFile25,OSCore25,OSWin11E
```
with `OSWin11E` started shortly before the sequence (it shuts down an hour
after its start), and `Test-MatrixCleanup.ps1 -Mode Verify -Machine
OSFile19,OSFile22,OSFile25,OSCore25,OSWin11E` after it. The address
`192.168.12.26` is not in the hosts file of the host (the matrix lab uses
.10, .11, .12, .19, .22, and .25).
- **What it can find.** Server Core has no shell and no Desktop Experience
components; the module is .NET Framework 4.5.2 code with Win32 calls, so a
difference would show in the import, in AlphaFS, or in the privilege code. It
can not find a difference of a localized system.
### ARM64
No reproduction exists. The crash of PowerShell 7.6.1 under x64 emulation had
no module frames, and native x64 CI did not reproduce it (`progress.md`, open
item 5). It stays open.
Not tested, and out of scope by the decision below: a localized operating
system (no such image exists: the ISO files are English), the names of built-in
accounts in other languages, and the localized texts of Windows errors. The
review found one test that depends on a localized text, the comparison of
`Get-Privileges` with the State column of `whoami /priv` in
`ParameterSets.Items.Tests.ps1`; it compares the state now only where `whoami`
prints the English words.
### Out of scope: Server Core, ARM64, a localized system, non-Windows servers
The maintainer decided on 2026-10-11 to forget these four environments: the
audience of the tool does not need them, so they are not open items, and no
plan, deployment, or test of this work covers them (decision 22 below, Memory
Bank Decision 25). The Server Core plan that this section had
(image index 3 of the Server 2025 ISO, about 12 GB, under an hour for the
machine) was dropped with the decision and stays in the history of this file;
nothing was deployed. The ARM64 crash of PowerShell 7.6.1 under x64 emulation
had no module frames and was never reproduced on native x64.
## Final measurement
@ -1335,6 +1292,7 @@ the maintainer can reverse every one of them.
tested, to keep the measured commit stable for the lab acceptance.
13. **Server Core, ARM64, and a localized system** were not tested (Stage D):
no new machine without the maintainer's word, and no such image exists.
Decision 22 drops them.
14. **No kit script.** The commands of the method are in this report, and the
scripts of the session are named in the evidence; the handoff calls a kit
welcome, not required.
@ -1378,6 +1336,12 @@ the maintainer can reverse every one of them.
unit suite ran on the three file servers and the client. The cells are the
acceptance of a new candidate (open item 6), and they cost the matrix lab's
time (an evaluation client that shuts down every hour).
22. **Server Core, ARM64, a localized operating system, and non-Windows file
servers are out of scope** (the maintainer, 2026-10-11: the audience of the
tool does not need them; Memory Bank Decision 25). They are not open items
and no further plan, deployment, or test covers them. The decision is about
the tests and the acceptance of this work; the question of #34 (Decision 23
of the Memory Bank) is not changed by it.
## Open items for the maintainer
@ -1399,7 +1363,19 @@ of the effective-access check, Decisions 22 and 24, and #34) stay as they are.
the default set `PathComplex` binds, and the property does not select the
Simple set (probed for all four cmdlets: `Add-NTFSAccess`,
`Remove-NTFSAccess`, `Add-NTFSAudit`, and `Remove-NTFSAudit`). For a
descriptor it selects `SDSimple`. Intended or not?
descriptor it selects `SDSimple`. The cause is the declaration, not
PowerShell: when a piped object satisfies the mandatory parameters of the
default set, the binder settles on it and never tries a parameter that
belongs to another set. Without `DefaultParameterSetName`, a model with the
same four sets binds `PathSimple` for an object with `AppliesTo` and
`PathComplex` for one without, and every named call resolves as before
(`E\probes\p-parameterset-binding*.ps1` and their outputs; the real
cmdlets were not changed or tested). The default is a leftover: at 4.2.6
`AppliesTo` was optional and the sets overlapped, and `4b1abc9` made it
mandatory so that the Complex sets win without it. Intended or not? Leaving
it is a documented limit; removing the default is a change of four cmdlet
attributes with a new error for an object that carries `AppliesTo` and
`InheritanceFlags` both.
4. **Twelve getters of pipeline parameters** that take pipeline input by
property name and that no test supplies on a piped object (Stage C lists
them): tests close them.
@ -1413,11 +1389,7 @@ of the effective-access check, Decisions 22 and 24, and #34) stay as they are.
takes them, needs the acceptance (matrix cells and first lab) on its own
bytes. The acceptance of the fixed build below is evidence for the behavior,
not for a release.
7. **Server Core** (the plan of Stage D; it widens the proposed Decision 24),
**ARM64**, **a localized operating system** (names of built-in accounts,
error texts, and any other comparison that AlphaFS or Windows does with the
culture), and **non-Windows file servers**.
8. **A trivial observation:** `RemoveAudit.cs` converts the scope of an
7. **A trivial observation:** `RemoveAudit.cs` converts the scope of an
`-AppliesTo` twice for the set `PathSimple` (at the top of `ProcessRecord`
and again in the loop). It is idempotent and has no effect.
@ -1430,11 +1402,10 @@ of the effective-access check, Decisions 22 and 24, and #34) stay as they are.
| The unit suite on a domain member | Closed | `OSFile25`, four configurations, the counts of the rc7 acceptance; 9 sequence and 3 explicit branch points more than the host |
| The unit suite of the final build on the other operating systems | Closed | the 22 behavior files on Windows Server 2019, 2022, 2025 and Windows 11 (build 28000), elevated and as a basic user, both editions: 1,156 cases in each of the 16 configurations, no failure (`fix5`, `fix5c`); the first run (`fix1`) found one failing test, caused by its oracle and fixed in the test (`f1f3d8f`); both labs verified clean afterwards |
| The code of `fdd7a8b` | Closed, with one branch visited by nothing | the ServerAdmin tests (lines 478 and 486) and the basic-user runs on the domain member visit the fall back; the answer "RPC server unavailable" of the context initialization is visited by nothing (explained) |
| `AUDIT-OWNER-RETRY`, `AUDIT-READ-DENIED` | Open | no test visits them; no trigger on a Windows file server (probe of 48 calls); closing needs a non-Windows server (#34) or a seam |
| `AUDIT-OWNER-RETRY`, `AUDIT-READ-DENIED` | Open, explained | no test visits them; no trigger on a Windows file server (probe of 48 calls); closing needs a non-Windows server (out of scope, decision 22) or a seam (a design change) |
| The reachable gaps, the judged matrix of the 64 parameter sets | Partly closed | 79 `It` blocks (140 rows), 33 of 35 mutations caught; 7 sets closed, 51 partly, 1 open, 4 `MaintainerDecision`, 1 `None`; 12 getters of pipeline parameters open; one defect (hard-link names) and one behavior (piped `AppliesTo` for a path) for the maintainer |
| Other cultures | Closed for `de-DE` and `tr-TR`, after two defects | two defects found and fixed test-first: the comparison of an identity with a name (`419cfb3`) and `Get-ChildItem2 -Filter` (`0028ccd`, `fbe0289`, `8a625c8`), the second found by the independent review after the scan had missed its class of call; six `de-DE` failures are assertions on English text; localized names and texts untested |
| Windows Server Core | Open | a plan with the image index, disk, time, and commands; deploying needs the maintainer's word |
| ARM64 | Open | no reproduction |
| Other cultures | Closed for `de-DE` and `tr-TR`, after two defects | two defects found and fixed test-first: the comparison of an identity with a name (`419cfb3`) and `Get-ChildItem2 -Filter` (`0028ccd`, `fbe0289`, `8a625c8`), the second found by the independent review after the scan had missed its class of call; six `de-DE` failures are assertions on English text; localized names and texts are out of scope (decision 22) |
| Windows Server Core, ARM64, a localized system, non-Windows file servers | Out of scope | the maintainer's decision of 2026-10-11: the audience of the tool does not need them (decision 22) |
| The final commit | Closed | `61e936e`, built once at `8a625c8` and measured on those bytes: 1,459 cases per configuration, no failure; 3,258/3,664 sequence points (88.92%), 1,090/1,168 explicit branch points; skip eligibility by row (666 skipped rows, none without an executed counterpart); the same 187 unvisited methods as at `b2cb47b`, all classified; the merged tables of the sources are those of `b2cb47b` (Final measurement) |
| The lab acceptance of the fixed build | Closed for the first lab | three runs on three builds (`b2cb47b`, `0028ccd`, and the final build `8a625c8`), both editions, 245 passed, 0 failed, 1 skipped each, clean end state; the matrix cells were not run again (a new candidate needs them) |
@ -1502,9 +1473,9 @@ by a second review.
machine of the matrix; open item 6); a hard link through a volume mounted
into a folder or through a junction to another volume (the defect is
reproduced with a substituted drive only); the 12 getters; the matrix suite
on `OSWin11E` with the new files (`OSWin11` ran it); Windows Server Core;
ARM64; a localized operating system; a file server that is not a Windows
server.
on `OSWin11E` with the new files (`OSWin11` ran it).
- Out of scope, and not run, by decision 22: Windows Server Core, ARM64, a
localized operating system, and a file server that is not a Windows server.
- The Release build is not byte-reproducible: a hash identifies the measured
files, not the source. Different code has different denominators; the
measurements of `5a5d58b`, `fa0701b`, and `b2cb47b` are not increments of

Loading…
Cancel
Save