diff --git a/.memory-bank/activeContext.md b/.memory-bank/activeContext.md index d5351dd..c0ca8f4 100644 --- a/.memory-bank/activeContext.md +++ b/.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,33 @@ 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-20 12:40 UTC: 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. Open before the stable pull request: the +tests-only round for the plain gaps (until 2026-11-02), the maintainer's #34 +decision on that date (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 has run; 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 chain 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 +133,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 +149,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] - ` 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 +171,21 @@ 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 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: four implementers, one per `ParameterSets.*` test + file, work in worktrees from `master`; their commits go into one branch + with the report and the ParameterSets table updated, and what is left is + listed. A defect that a test finds needs his decision and rc9. 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. 7. Do not release stable 5.0.0 or equate a percentage with gate closure. diff --git a/.memory-bank/debugging-insights.md b/.memory-bank/debugging-insights.md index eab0c73..8fa93c5 100644 --- a/.memory-bank/debugging-insights.md +++ b/.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) and the rc8 fix: probes, red and green runs, and the independent reviews --- # Debugging insights @@ -90,3 +90,28 @@ 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. diff --git a/.memory-bank/decisions/0021-quality-gate-before-5.0.0.md b/.memory-bank/decisions/0021-quality-gate-before-5.0.0.md index caa7106..5897cc8 100644 --- a/.memory-bank/decisions/0021-quality-gate-before-5.0.0.md +++ b/.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,17 @@ 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; open +are the tests-only round (until 2026-11-02), #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. diff --git a/.memory-bank/deployment-notes.md b/.memory-bank/deployment-notes.md index a3cb7aa..dbb202e 100644 --- a/.memory-bank/deployment-notes.md +++ b/.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 \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 ` (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. diff --git a/.memory-bank/progress.md b/.memory-bank/progress.md index 965126b..a2791fc 100644 --- a/.memory-bank/progress.md +++ b/.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,17 @@ 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 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). 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. +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 +118,19 @@ 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). The tests-only + round for the plain gaps started the same day. ## Stable capabilities @@ -129,12 +143,12 @@ 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 tests-only + round, #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 +184,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. diff --git a/.memory-bank/techContext.md b/.memory-bank/techContext.md index 71585a6..46ec278 100644 --- a/.memory-bank/techContext.md +++ b/.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 ` - 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.