Browse Source

Merge pull request #130 from raandree/ai/memory-bank-rc8

docs(memory-bank): record the published rc8, the tests-only round, and the path to stable
master
Raimund Andrée 2 weeks ago
committed by GitHub
parent
commit
d0cb57c503
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 125
      .memory-bank/activeContext.md
  2. 42
      .memory-bank/debugging-insights.md
  3. 25
      .memory-bank/decisions/0021-quality-gate-before-5.0.0.md
  4. 85
      .memory-bank/deployment-notes.md
  5. 57
      .memory-bank/progress.md
  6. 19
      .memory-bank/techContext.md

125
.memory-bank/activeContext.md

@ -1,6 +1,6 @@
---
status: current
last-verified: 2026-10-19
last-verified: 2026-10-20
owner: active-agent
source: current task evidence
---
@ -9,41 +9,36 @@ source: current task evidence
## Current focus
State at 2026-10-19 12:30 UTC: Handoff 5 is integrated. The maintainer merged
pull request #125 (`ai/coverage-unknowns`, `17729d7`) and #124 (Dependabot: the
pinned `upload-artifact` and `download-artifact` actions, `354ce04`) into
`master`; CI is green on both. rc7 (`fa0701b`) is still the newest release and
the manifest still says `rc7`, but `master` is ahead of it by seven product
files (the culture comparisons of an identity and of `Get-ChildItem2 -Filter`,
and the piped `AppliesTo`, Decision 26). The stable build is accepted through
the last prerelease, so rc8 is mandatory. On 2026-10-19 the maintainer decided
the path to stable (Decision 21, "Closing the gate"): rc8 carries the fix of
the false "no access" of `Get-NTFSEffectiveAccess`; the hard-link names stay a
known limit in the release notes; the plain test gaps are closed in a
tests-only round until 2026-11-02; #34 waits for a tester until 2026-11-02;
Decisions 22 and 24 are accepted (23: option 3). His #34 follow-up went up on
2026-10-19 at 12:09 UTC; nobody has replied. Next: the fix and the test round.
State at 2026-10-21: 5.0.0-rc8 is published and accepted. The
maintainer merged #126 (the decisions of 2026-10-19) and #127 (`c719197`: the
fix of the false "no access" of `Get-NTFSEffectiveAccess`, the known limit of
the hard-link cmdlets in the pages and the CHANGELOG, and the label `rc8`) and
tagged `5.0.0-rc8` at about 10:28Z. The CI run `39408140862` passed, and the
Gallery has rc8 since 10:40:58Z, GitHub since 10:41:07Z. The identity check
passed. The lab acceptance of the published bytes passed in one detached driver
(68 minutes, 10:38 to 11:47Z): three cells 1,374/0/12, the suite in 24 runs on
six machine classes, the first lab 245/0/1 per edition, every end state CLEAN
(record `Tests/Lab/Acceptance-2026-10-20-published-rc8.md`, #128). The boundary
of the new error, a computer name of 32,718 characters, holds on Server 2019,
2022, 2025, and Windows 11 26H1. He merged the record, #128, on 2026-10-21 at
05:48Z (`master` `461015e`, CI green). The tests-only round for the plain gaps
ran on 2026-10-20 (Next step 6) and is #129, with this Memory Bank in #130;
their CI is green, and the runner's counts equal the local run in each test
file. Open before the stable pull request: the merge of both, the maintainer's
decision on #34 on 2026-11-02 (no reply to his follow-up of 2026-10-19), and
his check of `PSGALLERY_API_KEY`. The stable build is new bytes that no lab
ran; the procedure accepts the last prerelease, so the stable change touches
only the label, the CHANGELOG, and `$publishedVersions`. Any other product
change needs rc9 and the same acceptance (about 70 minutes with the script).
State at 2026-10-10 15:45 UTC: the maintainer integrated the release-gate stack
into `master` (`6dd799f`, CI green): #116 (rc7, `8a6be9f`), #120
(`bdb9981`; it replaced #117, which GitHub closed unmerged when the branch
deletion after #116 removed its base, see Decision 15), #118 (`03bef2c`,
handoff 1, the paths), #119 (`fa0701b`, handoff 2, the operating-system
matrix), and #121 (the Memory Bank). He tagged `fa0701b` as `5.0.0-rc7` at about
12:20Z, and rc7 is published (Gallery 12:30:57Z, GitHub 12:31:09Z); 4.2.6 stays
the stable Gallery version. rc7 contains the Phase 2 behavior changes, the path
tests and fixes, and the three module fixes of the matrix (`962887a`,
`fdd7a8b`). The published rc7 passed its lab acceptance (gate 3) on the same
day, in the matrix and in the first lab, with the counts of the final local
candidate (record `Tests/Lab/Acceptance-2026-10-10-published-rc7.md`). Stable
5.0.0 stays gated (Decision 21).
The maintainer asked on 2026-10-09 at 21:21 UTC to continue with the
release-gate handoffs and to decide and report later. The agent's decisions are
D1 to D47 in `decisions-night-2026-10-09.md` of the session files. Decisions
22 (Phase 2), 23 (the #34 dossier), and 24 (the matrix) are proposed: the agent
confirmed Decision 22 under the delegation, and neither that nor any risk
acceptance is the maintainer's.
State at 2026-10-10: the maintainer integrated the release-gate stack into
`master` (#116, #120, #118, #119, #121; `fa0701b`, CI green; GitHub closed #117
unmerged when the branch deletion removed its base, Decision 15) and tagged rc7
(Gallery 12:30:57Z). The published rc7 passed its lab acceptance the same day
(record `Tests/Lab/Acceptance-2026-10-10-published-rc7.md`). The agent's
delegated decisions of 2026-10-09 and 10 are D1 to D47 in
`decisions-night-2026-10-09.md` of the session files; the maintainer accepted
Decisions 22 and 24 on 2026-10-19 and decides 23 on 2026-11-02.
## Evidence
@ -141,6 +136,15 @@ acceptance is the maintainer's.
cells did nothing: a `powershell.exe` that PowerShell 7 starts inherits its
`PSModulePath` (lab README). Server Core, ARM64, a localized system, and
non-Windows servers are out of scope (Decision 25).
- rc8, 2026-10-20: fix (b) test-first on `ai/fix-effective-access-init-errors`.
A `-ServerName` of 40,000 characters gave `Synchronize` and no error before
and gives an error now; two tests were red and are green in four
configurations, and the suite has 1,494 cases per configuration, 0 failed.
The independent review (`code-review`) found one Minor, the warning "based on
this computer" before the error (fixed, with tests), and three Nits. The
acceptance evidence is `rc8-published` in the session folder
`816cf47d-2f80-4eba-8ac9-41702c49560b\files\qg-unknowns` (430 files, with a
manifest); the published hashes are in the deployment notes.
- Raw evidence is outside git: the session folder
`4b12e2f4-d4c7-4a5d-883a-ddb7421c4848\files` (`qg-paths`, the matrix runs, the
night log) and
@ -148,19 +152,17 @@ acceptance is the maintainer's.
## Next step
1. Gate 3 is done for the published rc7 (the record above). rc8 needs the same
acceptance (the matrix cells, the first lab, the suite on the file servers
and the client); the release procedure accepts the last prerelease for the
stable build (Decision 21, "Closing the gate").
Open: keep or replace the matrix VMs (about 60 GB) and the evaluation client
(it shuts down every hour; `OSWin11E` is off), and a domain cell for Windows
11 26H1, whose client loses the secure channel to the Server 2025 domain
controller. A kit script for the whole sequence would make the repetition
one command (the driver is `Run-Gate3.ps1` in the evidence; not in the kit).
2. The rc8 pull request adds `5.0.0-rc7` to `$publishedVersions` (the list ends
at rc6; adding it earlier fails the reuse test, deployment notes), and the
stable pull request adds `5.0.0-rc8`. Every release step is the
maintainer's.
1. Gate 3 is done for the published rc7 and rc8 (the records). The stable build
is accepted through rc8 (Decision 21, "Closing the gate"). Open: keep or
replace the matrix VMs (about 60 GB, saved between runs) and the evaluation
client (it shuts down every hour; `OSWin11E` is off), and a domain cell for
Windows 11 26H1, whose client loses the secure channel to the Server 2025
domain controller. `Chain-Published.ps1` in the session files runs the whole
sequence (not in the kit; deployment notes).
2. The stable pull request: no `Prerelease`, `## [5.0.0] - <date>` with an empty
`[Unreleased]` and the links, and `5.0.0-rc8` in `$publishedVersions` (the
list ends at rc7 now). The maintainer checks the expiry of
`PSGALLERY_API_KEY` first, merges, and tags. Every release step is his.
3. He decides the other open items of the paths report: `FileSecurity`
conversions, `RemoveAll` account filters, lazy path overloads, abandoned
`PrivilegeEnabler`, dot patterns of `Get-ChildItem2 -Filter`, the 17
@ -172,20 +174,25 @@ acceptance is the maintainer's.
chooses between waiting longer and accepting the untested risk with a
release-note caveat. No agent can accept it.
5. Of the two LOW findings of the security review (record, Limits), the
swallowed initialization errors of `GetEffectiveAccess` (a false "no
access" instead of an error on an OS that refuses at initialization) are
fixed in rc8 (decided 2026-10-19): record the exceptions in
`authzException`, with a regression test and a check of "the error stays" in
the help and CHANGELOG. He still decides the other: the ACL of the stage
swallowed initialization errors of `GetEffectiveAccess` are fixed in rc8
(`25fe775`, #127): an error instead of a false "no access", and the warning
only with a result. He still decides the other: the ACL of the stage
folders under `C:\` in the lab kit (they inherit Authenticated Users:
Modify; protecting them is a design change of the controller and needs a new
acceptance). The help could also say that a local standard user who asks
about a domain account still gets "Access is denied".
6. Handoff 5 is done and merged (Evidence). Decided on 2026-10-19 (Decision
21): the hard-link names under another root (a defect with a reproduction)
stay a known limit that the release notes list; the plain test items (68
`budget` mentions in the 57 sets that are not closed) are closed in a
tests-only round until 2026-11-02. Still his: the silent default scope for a
piped `AppliesTo` that PowerShell cannot convert (a design change), the 8
getters of pipeline parameters, and the audit paths.
21): the hard-link names under another root stay a known limit; the pages
and the CHANGELOG say so since rc8. The tests-only round for the plain items
(68 `budget` mentions) ran on 2026-10-20: four implementers, one
`ParameterSets.*` file each, integrated on `ai/tests-round-1` (#129): 89 `It`
blocks, 121 cases, the suite 1,494 to 1,615 per configuration, 0 failed;
38 of 64 sets closed, 26 with a leftover (16 Limit, 7 MaintainerDecision, 3
would-pin), no defect; report
`Tests/Coverage/Quality-Gate-Test-Round-2026-10-20.md`. On the runner (CI run
`39551726767`) the counts equal the local run in each test file. No plain
gap is left. A defect that a test finds needs his decision and rc9. Still
his: the 7 MaintainerDecision and 3 would-pin rows, the silent default scope
for a piped `AppliesTo` that PowerShell cannot convert (a design change), the
8 getters of pipeline parameters, and the audit paths.
7. Do not release stable 5.0.0 or equate a percentage with gate closure.

42
.memory-bank/debugging-insights.md

@ -1,8 +1,8 @@
---
status: current
last-verified: 2026-10-10
last-verified: 2026-10-20
owner: software-engineer
source: Handoff 5 (the coverage unknowns): probes, red and green runs, and the independent review
source: Handoff 5 (the coverage unknowns), the rc8 fix, and the tests-only round: probes, red and green runs, and the independent reviews
---
# Debugging insights
@ -90,3 +90,41 @@ fails without it (Decision 16).
`AppliesTo` was optional; `4b1abc9` made it mandatory in the Simple sets, so
the default no longer decided a named call. Build a model of the parameter
sets before you change an attribute, and test the real cmdlet afterwards.
## A swallowed initialization error (`catch { }`)
- `Win32.GetEffectiveAccess` ran the start of the authorization manager inside
an outer `catch { }`. A refusal there gave no exception and no rights, so the
cmdlet wrote an entry with `Synchronize` only (.NET adds it to every allow
rule) and no error: a false "no access". The security review of the matrix
found it (LOW); rc8 fixed it (`25fe775`) with one `try`/`catch` that records
every exception in `authzException`.
- A trigger without a test seam: `Get-NTFSEffectiveAccess -ServerName ('a' *
40000)`. `AuthzInitializeRemoteResourceManager` fails with error 14 for a name
of 32,718 characters or more, and with 1722 (RPC server unavailable, which
keeps the documented fallback and its warning) for a shorter one. Server
2019, 2022, 2025, and Windows 11 26H1 agree (a probe in the rc8 record). Bisect
the length of an input before you add a seam.
- The test accepts both outcomes (an error, or the result of this computer) and
fails for no access without an error: the red run said `Expected FullControl,
but got Synchronize`. A system-dependent boundary must not fail the test where
a system answers like for a short name.
- The review found a second flaw in the same output: the warning "the result is
based on this computer" came before an error that left no result. A warning
that qualifies a result belongs with the result (`!FromRemote &&
!OperationFailed`); the tests assert its absence next to the error.
- A word in the CHANGELOG is a claim: "an overlong name" suggested 256
characters, where 1722 still falls back. The entry names the probed length.
## A helper that waits for a child that never started
- The helper that ran a test file in the four CI configurations passed the
Pester name filter to the basic-user run through `runas /trustlevel:0x20000
"…"`. A filter with spaces (`*treat a path with brackets*`) broke the nested
quotes, the child never started, and the helper waited for its whole timeout
(30 minutes). An implementer blamed the load of four agents at once; a call
alone with the same spaced filter showed the helper.
- The filter now travels as base64 (`-FullNameBase64`), and a basic-user run
gives up after 60 seconds when its runner never started (about 6 seconds
normally). Before you blame the load for a stall, repeat the call alone with
the same arguments.

25
.memory-bank/decisions/0021-quality-gate-before-5.0.0.md

@ -1,9 +1,9 @@
---
status: accepted
date: 2026-10-08
last-verified: 2026-10-19
last-verified: 2026-10-20
owner: shared
source: maintainer decision of 2026-10-08; closing choices of 2026-10-19
source: maintainer decision of 2026-10-08; closing choices of 2026-10-19; status of 2026-10-20
---
# Decision 21: A quality gate before 5.0.0
@ -69,3 +69,24 @@ maintainer answered five questions, each time with the recommended option:
`$publishedVersions`), the tag. The maintainer checks the expiry of
`PSGALLERY_API_KEY` before the stable tag. After 5.0.0 the repository is
archived (Decision 18), so what ships stays.
### Status on 2026-10-20
rc8 is published (tag `c719197`, Gallery 10:40:58Z) and accepted: the identity
check, three matrix cells 1,374/0/12, the suite in 24 runs, the first lab
245/0/1 per edition, every end state CLEAN (record
`Tests/Lab/Acceptance-2026-10-20-published-rc8.md`). The fix of the swallowed
initialization errors went in with a review (one Minor, the warning before the
error, fixed), and the hard-link known limit is in the pages and the
CHANGELOG. The exit criterion "matrix on published bytes" is met for rc8. The
tests-only round ran the same afternoon (report
`Tests/Coverage/Quality-Gate-Test-Round-2026-10-20.md`): 89 `It` blocks, 121
cases, the suite 1,494 to 1,615 per configuration with no failure, 38 of 64
parameter sets closed, 26 with a leftover (16 Limit, 7 MaintainerDecision, 3
would-pin), no defect. It is #129; on the runner the counts equal the local
run in each test file. No plain gap is left. Open are the merge of #129, the
10 rows that wait for his decision (7 MaintainerDecision, 3 would-pin), #34
(2026-11-02), and the key check. The stable build is new bytes: the stable
change may touch only the
label, the CHANGELOG, and `$publishedVersions`; any other product change needs
rc9 and the same acceptance.

85
.memory-bank/deployment-notes.md

@ -1,32 +1,36 @@
---
status: current
last-verified: 2026-10-10
last-verified: 2026-10-20
owner: software-engineer
source: release gates of 5.0.0 (lab acceptance, OS matrix, publication plan), repository evidence
---
# Deployment notes
## Publish the next prerelease (rc7 is published)
## Publish the next prerelease (rc8 is published)
State on 2026-10-10 at 12:40 UTC: rc7 is published. The whole stack is merged
into `master` (`fa0701b`, the tree of `2b8643f`): #116 (rc7, `8a6be9f`, 09:10Z),
#120 (`bdb9981`, 10:50Z), #118 (`03bef2c`, 11:12Z), and #119 (`fa0701b`,
11:28Z). #117 had been closed without a merge at 09:10:16Z, when the branch
deletion after the merge of #116 removed its base branch (Decision 15,
operating rule); #120, a new pull request from its head `f11ff41`, replaced
it. The CI run on `master` at `fa0701b` passed at 11:40Z. The maintainer pushed
the lightweight tag `5.0.0-rc7` at `fa0701b` at about 12:20Z. The CI run
`38051611526` of the tag passed: Build and test, then Release at 12:31:34Z
without an approval step, because the `powershell-gallery` environment has no
required reviewer. The Gallery has rc7 since 12:30:57Z, GitHub since 12:31:09Z.
State on 2026-10-20 at 12:40 UTC: rc8 is published. #127 (`c719197`, 10:27:39Z:
the fix of `Get-NTFSEffectiveAccess`, the hard-link known limit, the label
`rc8`) and #126 are merged. The maintainer pushed the lightweight tag
`5.0.0-rc8` at `c719197` at about 10:28Z. The CI run `39408140862` of the tag
passed: Build and test, then Release without an approval step, because the
`powershell-gallery` environment has no required reviewer. The Gallery has rc8
since 10:40:58Z, GitHub since 10:41:07Z, 13 minutes after the tag.
`Test-PublishedRelease.ps1 -Version 5.0.0-rc8` verified the identity at 10:42Z:
the tag commit is on `master`, the Gallery's SHA-512 matches the downloaded
nupkg, the 11 module files are byte-identical in the nupkg and the GitHub zip,
and the manifest says `5.0.0-rc8`. The published bytes of rc8:
`Test-PublishedRelease.ps1 -Version 5.0.0-rc7` verified the published identity
at 12:33Z: the tag commit is `fa0701b` on `master`, the Gallery's SHA-512
matches the downloaded nupkg, the 11 module files are byte-identical in the
nupkg and the GitHub zip, and the manifest says `5.0.0-rc7`. The evidence is
outside git, in `published-rc7` of the session folder
`4b12e2f4-d4c7-4a5d-883a-ddb7421c4848\files`. The published bytes:
- `NTFSSecurity.dll` SHA-256
`D8CB4015BF25379C77A645F82EEECA54F86219F228A5029E32E4D52FBD016E79`
- `NTFSSecurity.zip` SHA-256
`288152E20F8CFB1B029BAC055345339970C65BD57C8BA814C2616C32D9F812BC`
- nupkg SHA-256
`EA90E16F2152016E97BFB3D2413D29F8944704E9D4FBD5101D0A263841BC0510`
rc7 was published on 2026-10-10 (tag `fa0701b`, CI run `38051611526`, Gallery
12:30:57Z, no approval step after the same stack of merges, see `progress.md`).
Its bytes:
- `NTFSSecurity.dll` SHA-256
`D3B7CBE362C37D1016559669CB2EFF5034A6945CA1B03DDB49F1361363D203A7`
@ -38,23 +42,16 @@ outside git, in `published-rc7` of the session folder
The release notes of a prerelease are the `[Unreleased]` section of
`CHANGELOG.md`.
rc7 contains everything that is merged: the behavior changes of Phase 2
(#116), the quality-gate paths (#120, #118), and the three module fixes of
the matrix (#119, in two commits: `962887a` holds two, `fdd7a8b` one; they
don't revert separately, because they conflict in `Security2/Win32/Lib.cs` and
`CHANGELOG.md`), with the kit, the controller changes, and the record of the
operating-system matrix (Decision 24).
1. Accept the published package (next section): done for rc7 on 2026-10-10,
with the identity check, the three cells, the suite on six machine classes,
and the first lab (record
`Tests/Lab/Acceptance-2026-10-10-published-rc7.md`).
A changed binary (rc8, or the build of 5.0.0) needs the same cells again.
2. Add `5.0.0-rc7` to `$publishedVersions` in `Tests/Repository.Tests.ps1`
only in the change that sets the next version (rc8 or 5.0.0), as
1. Accept the published package (next section): done for rc7 (2026-10-10) and
rc8 (2026-10-20); the records are `Tests/Lab/Acceptance-2026-10-10-published-rc7.md`
and `Tests/Lab/Acceptance-2026-10-20-published-rc8.md`. A changed binary (rc9,
or a build of 5.0.0 that differs by more than the label) needs the same
cells again.
2. The stable change adds `5.0.0-rc8` to `$publishedVersions` in
`Tests/Repository.Tests.ps1` (the list ends at rc7), as
`Docs/Contributing/05-Releasing.md` says. The test "Should not reuse a
version that the PowerShell Gallery already has" fails when the list holds
the version of the manifest, which still says rc7.
the version of the manifest.
## Accept a published package
@ -79,15 +76,22 @@ Local `-ModulePath` runs are validation; the gate needs the published bytes.
the final local candidate through the same stages (readiness, controller,
`Validate-LabResults.ps1`, snapshot, `-RemoveFixture`, `Test-MatrixCleanup.ps1`
with the four domain controllers and both machines) in one detached driver.
The published rc7 ran in one detached driver in this order (61 minutes,
14:29 to 15:30Z, `OSWin11E` started 14:25:49Z): the cells, then
Published rc7 and rc8 ran in one detached driver each: the cells, then
`Run-MatrixLocalSuite.ps1 -ModulePath <zip-<version>\NTFSSecurity of the
identity check> -Mode Elevated,Basic` on the host and five machines (one
every 75 seconds: AutomatedLab imports one lab at a time), then
`Test-MatrixCleanup.ps1 -Mode Verify` (CLEAN at the first check, so the
cells first and the suites after them leave nothing to repair), then the
first lab. The driver is `Run-Gate3.ps1` in the evidence folder `gate3-rc7`
of the session files; it only calls these scripts and isn't in the kit.
first lab. rc8 used `Chain-Published.ps1 -Version 5.0.0-rc8 -Tag rc8
-Evidence <folder>` (session files `qg-unknowns\scripts`, not in the kit;
68 minutes, 10:38 to 11:47Z). It restores the saved machines of both labs
(`Start-LabMachines.ps1`: domain controllers first, a minute for the
directory services), waits for the version on the Gallery, freezes the files
of the tag in a worktree, runs the identity check and the readiness checks,
starts `OSWin11E` right before the cells, and ends with the first lab
(`Run-LiveAcceptancePublished.ps1`, `-Version` per edition) and a read-only
check of both labs. Launch it after the tag, arm a heartbeat, and save the
machines again when it is done. rc7 ran the older `Run-Gate3.ps1`.
3. Remove the fixture and check the end state independently with
`Test-MatrixCleanup.ps1`, which takes the lab name and the machine names
(`-LabName WindowsAccessControlLab -DomainController F1ADC1, F1BDC1, F2DC1,
@ -181,3 +185,8 @@ Local `-ModulePath` runs are validation; the gate needs the published bytes.
- Restart the evaluation client (`OSWin11E`) right before a sequence or a suite,
not before several: it shuts down an hour after each start. The restart takes
about two and a half minutes and may need the repair of the secure channel.
- The lab VMs stay saved (`Save-VM`) between runs. After nine days, a restore in
two waves (the domain controllers, a minute for the directory services, then
the other machines) passed the readiness checks of both labs at the first
attempt, about five minutes after the start. `Start-LabMachines.ps1` restores
them, and `Save-VM` puts them back after the run.

57
.memory-bank/progress.md

@ -1,6 +1,6 @@
---
status: current
last-verified: 2026-10-19
last-verified: 2026-10-20
owner: active-agent
source: repository and validation evidence
---
@ -9,16 +9,15 @@ source: repository and validation evidence
## Current status
5.0.0-rc7 is published on the Gallery and GitHub (2026-10-10, tag at
`fa0701b`); rc6 is the one before it. On 2026-10-10 the maintainer merged the
whole stack into `master` (CI green): #116 (rc7), #120 (it replaced
#117, which GitHub closed unmerged when the branch deletion after #116 removed
its base), #118 (the quality-gate paths), #119 (the operating-system matrix
with three module fixes, Decision 24), and #121 (the Memory Bank). The
published rc7 passed its lab acceptance (gate 3) in the matrix and in the first
lab. On 2026-10-19 he merged #125 (Handoff 5) and #124 (Dependabot), and decided
the path to stable (Decision 21, "Closing the gate"). Stable Gallery version:
4.2.6.
5.0.0-rc8 is published on the Gallery and GitHub (2026-10-20, tag at
`c719197`); rc7 (2026-10-10, tag at `fa0701b`) is the one before it. On
2026-10-10 the maintainer merged the stack of #116, #120, #118, #119, and #121
into `master` (CI green; the milestones have the details). On 2026-10-19 he
merged #125 (Handoff 5) and #124 (Dependabot) and decided the path to stable
(Decision 21, "Closing the gate"); on 2026-10-20 he merged #126 (the decisions)
and #127 (the rc8 fix and label) and tagged rc8; on 2026-10-21 he merged #128
(the rc8 record). The published rc7 and rc8 passed their lab acceptance in the
matrix and in the first lab. Stable Gallery version: 4.2.6.
After 5.0.0, archive in favor of WindowsAccessControl (Decision 18).
## Recent milestones
@ -117,6 +116,26 @@ After 5.0.0, archive in favor of WindowsAccessControl (Decision 18).
accepted, 23 option 3 with the decision date 2026-11-02 (the #34 follow-up
went up at 12:09 UTC), rc8 with the fix of `GetEffectiveAccess`, and a
tests-only round for the plain test gaps until 2026-11-02.
- 2026-10-20: rc8. The maintainer merged #126 and #127 (`c719197`: the fix of
the swallowed initialization errors of `GetEffectiveAccess`, the known limit
of the hard-link cmdlets in the pages and the CHANGELOG, label `rc8`) and
tagged `5.0.0-rc8` at about 10:28Z; Gallery 10:40:58Z, GitHub 10:41:07Z, no
approval step. The identity check passed (10:42Z). The lab acceptance of the
published bytes ran in one detached chain (68 minutes, 10:38 to 11:47Z, the
saved machines restored first): three cells 1,374 passed, 0 failed, 12
skipped; the suite in 24 runs without a failure (1,191 cases per
configuration); the first lab 245/0/1 per edition; every end state CLEAN. A
probe on four operating systems showed the boundary of the new error (a name
of 32,718 characters). Record
`Tests/Lab/Acceptance-2026-10-20-published-rc8.md` (#128).
- 2026-10-20: tests-only round (Decision 21). Four implementers, one
`ParameterSets.*` test file each; integrated on `ai/tests-round-1` (#129):
89 `It` blocks, 121 cases, the suite 1,494 to 1,615 per configuration, 0
failed in four configurations; 38 of 64 sets closed (7 before), 26 with a
leftover (16 Limit, 7 MaintainerDecision, 3 would-pin); no defect. Report:
`Tests/Coverage/Quality-Gate-Test-Round-2026-10-20.md`. On 2026-10-21 the
CI of #129 and #130 passed; the runner's counts equal the local run in each
test file (run `39551726767`).
## Stable capabilities
@ -129,12 +148,13 @@ After 5.0.0, archive in favor of WindowsAccessControl (Decision 18).
## Open work
1. Decision 21 gate: the published rc7 is accepted in the matrix and the first
lab (record); rc8 needs the same acceptance, and stable follows it
(Decision 21, "Closing the gate"). Do not release 5.0.0 until the other
gates close. Release steps:
1. Decision 21 gate: the published rc7 and rc8 are accepted in the matrix and
the first lab (records); stable follows rc8 (Decision 21, "Closing the
gate"). Do not release 5.0.0 until the other gates close: the merge of #129
and #130 (no plain gap is left), #34 on 2026-11-02, and the key check.
Release steps:
`Docs/Contributing/05-Releasing.md`; remove the prerelease label, date
`[5.0.0]`, add the last prerelease to `$publishedVersions` (never the
`[5.0.0]`, add the last prerelease (rc8) to `$publishedVersions` (never the
version of the manifest), tag through CI.
2. Issues: #110's seven items were addressed by rc6, but #115 deliberately
used no closing keyword. #34 stays open for non-Windows owner feedback
@ -170,8 +190,9 @@ After 5.0.0, archive in favor of WindowsAccessControl (Decision 18).
missing, different, or unverifiable outcomes. The agent published nothing,
so the recovery has never run against the Gallery.
9. Operating-system matrix (Decision 24, accepted 2026-10-19): the lab and the
cells exist and the published rc7 passes them (record). #34: the follow-up
went up on 2026-10-19, no reply yet; the decision date is 2026-11-02.
cells exist and the published rc7 and rc8 pass them (records). #34: the
follow-up went up on 2026-10-19, no reply yet; the decision date is
2026-11-02.
10. Lab rollback evidence: new checkpoints report Standard even after a
successful temporary ProductionOnly probe; original VM policy restored, no
checkpoint restored. Don't represent them as verified Production snapshots.

19
.memory-bank/techContext.md

@ -1,6 +1,6 @@
---
status: current
last-verified: 2026-10-10
last-verified: 2026-10-20
owner: active-agent
source: repository and executable evidence
---
@ -42,9 +42,9 @@ source: repository and executable evidence
## Constraints
- Manifest: ModuleVersion 5.0.0, prerelease rc7, published 2026-10-10 (tag at
`fa0701b`). Latest stable 4.2.6. The reuse test fails if `$publishedVersions`
holds the manifest's version: add rc7 in the change that sets the next one.
- Manifest: ModuleVersion 5.0.0, prerelease rc8, published 2026-10-20 (tag at
`c719197`). Latest stable 4.2.6. `$publishedVersions` ends at rc7; the reuse
test fails if it holds the manifest's version, so the stable change adds rc8.
- Changed-section writes preserve unchanged owner/group/DACL/SACL (19).
Roots use root-folder APIs, not AlphaFS device security (#41).
- CHANGELOG contains user-visible changes only (7); tests and CI-only fixes
@ -67,11 +67,12 @@ source: repository and executable evidence
`Start-DetachedPowerShell.ps1`; use unique TEMP logs/result paths and an
explicit-PID watcher. No foreground sleep/poll loop. Long payloads use
a script file: nested Base64 encoding can exceed Windows command limits.
- Focused helper: TEMP `ntfs-focused\Start-FocusedRuns.ps1`; detach that
driver too because its internal wait loop must not block the agent shell.
- TEMP `ntfs-docs-tools\Invoke-ChangeChecks.ps1 -File <relative paths>`
performs AST/analyzer/lint/help checks. Absolute input paths misroute
cmdlet pages. Check actual analyzer/lint output, not just helper exit.
- Helpers live in the session folder `qg-unknowns\scripts`, not in TEMP (TEMP was
cleaned once): `Invoke-Build.ps1`, `Start-FocusedRuns.ps1` (four
configurations), `Run-FullSuite.ps1` (the CI test steps), `Check-Docs.ps1`.
Restore the pinned compiler (Microsoft.Net.Compilers 4.2.0 from NuGet) into
TEMP `ntfs-build` and platyPS 0.14.2 and MarkdownLinkCheck 0.2.0 (`Save-Module`
in Windows PowerShell) into TEMP `ntfs-docs-tools\modules`.
- actionlint 1.7.12 checks the workflow. Script changes use AST parse and
PSScriptAnalyzer; prose Markdown uses MD013 and changelog siblings-only
repeated-heading allowance. Native error codes must be checked explicitly.

Loading…
Cancel
Save