Skip to content

Commit 269e7a0

Browse files
committed
Prepare 2.1.0 release notes: fold all session work into the release
Updates the manifest ReleaseNotes and CHANGELOG so the 2.1.0 entry covers the full release: the -CheckCapabilities implementation, the E2E test suite, the clean analyzer gate and the removed dead parameters now appear alongside the correctness fixes. Release date set to today; compare links aligned to the repository's vX.Y.Z-postN tag scheme.
1 parent f4da33f commit 269e7a0

2 files changed

Lines changed: 71 additions & 60 deletions

File tree

‎AppxBackup.psd1‎

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,17 @@ Key Features:
193193

194194
# ReleaseNotes of this module
195195
ReleaseNotes = @'
196-
Version 2.1.0 (July 27, 2026)
196+
Version 2.1.0 (July 28, 2026)
197197
=============================
198198
199199
RELEASE SUMMARY:
200200
Correctness release. Six defects are fixed in which a guard compared a boolean
201201
result against $null and therefore never ran, including one that could hang a
202-
backup indefinitely and one that corrupted every captured tool output. The
203-
module gains its first automated test suite, a static-analysis configuration
204-
and a CI pipeline.
202+
backup indefinitely and two that corrupted or discarded captured tool output.
203+
The module gains its first automated test suite, a static-analysis gate that
204+
now runs clean, end-to-end packaging tests against the real MakeAppx, and a CI
205+
pipeline. Test-AppxBackupCompatibility -CheckCapabilities, previously accepted
206+
but ignored, is now implemented.
205207
206208
FIXED:
207209
@@ -213,6 +215,12 @@ Process execution
213215
invoked with a 1800 second timeout. Verified: a 3s timeout previously ran a
214216
30s process to completion and reported success, and now aborts at 3s.
215217
- Invoke-ProcessSafely never detected a failed Process.Start().
218+
- Invoke-ProcessSafely discarded almost all captured tool output. Output was
219+
collected through PowerShell eventing, whose handlers are not pumped while
220+
the pipeline blocks in WaitForExit; against MakeAppx, which emits 36 lines,
221+
one line survived, so packaging failures produced no usable diagnosis. Both
222+
streams are now read with StreamReader.ReadToEndAsync. This also removed a
223+
fixed 1-2 second sleep per invocation.
216224
- Captured stdout and stderr were prefixed with the capture buffer's own
217225
capacity ("16384" and "4096"). The buffers were built from an Int64 supplied
218226
by ConvertFrom-Json, and StringBuilder has (Int32) and (String) overloads but
@@ -238,6 +246,28 @@ Diagnostics
238246
- Write-AppxLog: removed a dead preference guard and corrected an empty-string
239247
check against $null.
240248
249+
ADDED:
250+
251+
- Test-AppxBackupCompatibility -CheckCapabilities is now implemented. Declared
252+
capabilities are classified against Config/CapabilityClassification.json into
253+
restricted (Microsoft-gated), device (consent at first use) and general, with
254+
restricted entries producing a warning. The classification lives in
255+
configuration so it can track new Windows capabilities without a code change.
256+
- tests/: 73 Pester tests covering path validation, process execution, tool
257+
discovery, configuration loading and the manifest/loader/disk contract.
258+
Written in the Pester 5 and 6 compatible subset. Every defect above has a
259+
regression test.
260+
- End-to-end packaging tests tagged E2E that build a synthetic package through
261+
the real Windows SDK MakeAppx, including a negative case asserting the
262+
tool's own error text surfaces. Excluded from the default run; opt in with
263+
build.ps1 -Task Test -IncludeE2E.
264+
- build.ps1: single Build/Analyze/Test entry point shared by contributors
265+
and CI, with NUnit and CSV output under -CI.
266+
- PSScriptAnalyzerSettings.psd1: correctness-scoped rule set, now reporting
267+
zero findings; CI blocks on any new warning or error.
268+
- .github/workflows/ci.yml: Windows CI across PowerShell 7.4 and 7.5.
269+
- .gitignore and CHANGELOG.md.
270+
241271
CHANGED:
242272
243273
- Aliases are exported module members instead of being created with
@@ -251,19 +281,13 @@ CHANGED:
251281
PowerShell 5.1 and could never satisfy PowerShellVersion 7.4.
252282
- AppxBackup.psd1 and Write-AppxLog.ps1 contain non-ASCII characters and now
253283
carry a UTF-8 BOM so they are read correctly by ANSI-defaulting hosts.
254-
255-
ADDED:
256-
257-
- tests/: 71 Pester tests covering path validation, process execution, tool
258-
discovery, configuration loading and the manifest/loader/disk contract.
259-
Written in the Pester 5 and 6 compatible subset. Every defect above has a
260-
regression test.
261-
- build.ps1: single Build/Analyze/Test entry point shared by contributors
262-
and CI, with NUnit and CSV output under -CI.
263-
- PSScriptAnalyzerSettings.psd1: correctness-scoped rule set; each exclusion
264-
documents why the rule does not apply to this project.
265-
- .github/workflows/ci.yml: Windows CI across PowerShell 7.4 and 7.5.
266-
- .gitignore and CHANGELOG.md.
284+
- Invoke-ProcessSafely no longer accepts -AsyncWaitMilliseconds. It configured
285+
the sleep that compensated for the event-handler drain, which no longer
286+
exists. No caller passed it.
287+
- Removed three private parameters that were accepted and ignored:
288+
-ValidateSchema (Get-AppxManifestData), -CreateBundle
289+
(New-AppxPackageInternal) and -OutputDirectory (New-AppxBackupManifest).
290+
No public surface change.
267291
268292
COMPATIBILITY:
269293
- Public contract unchanged: the same 8 functions and 4 aliases.

‎CHANGELOG.md‎

Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,7 @@ Releases before 2.1.0 were recorded only in the `ReleaseNotes` field of
1010

1111
## [Unreleased]
1212

13-
### Added
14-
15-
- `Test-AppxBackupCompatibility -CheckCapabilities` is now implemented. The
16-
package's declared capabilities are classified against
17-
`Config/CapabilityClassification.json` into restricted (gated by Microsoft, and
18-
the entries most likely to make a sideloaded restore behave differently from the
19-
original), device (user consent at first use) and general. Restricted
20-
capabilities add a warning, and the result object gains
21-
`DeclaredCapabilities`, `RestrictedCapabilities`, `DeviceCapabilities` and
22-
`CapabilitiesChecked`. The classification lives in configuration so it can track
23-
new Windows capabilities without a code change.
24-
- End-to-end packaging tests under `tests/`, tagged `E2E`. They build a synthetic
25-
but valid package through the real Windows SDK MakeAppx — including a negative
26-
case asserting that a failed run surfaces the tool's own error text — and are
27-
excluded from the default run. Run them with `build.ps1 -Task Test -IncludeE2E`;
28-
they skip cleanly without the SDK. CI runs them as a separate step on
29-
windows-latest, which ships the SDK.
30-
31-
### Changed
32-
33-
- The analyzer gate is now clean and CI blocks on warnings, not just errors. The
34-
22 remaining pre-existing warnings were resolved: genuinely dead variables
35-
removed, discarded call results made explicit with `$null`, safe-fallback
36-
catches given non-throwing acknowledgements, and the logger's deliberate silent
37-
catches suppressed at function level with justification.
38-
- Removed three private parameters that were accepted and ignored:
39-
`-ValidateSchema` (`Get-AppxManifestData`), `-CreateBundle`
40-
(`New-AppxPackageInternal`) and `-OutputDirectory` (`New-AppxBackupManifest`).
41-
No public surface change.
42-
43-
## [2.1.0] - 2026-07-27
13+
## [2.1.0] - 2026-07-28
4414

4515
A correctness release. Six defects shared one root cause: a guard compared the
4616
result of a boolean-returning call against `$null`. Because `[bool]` is never
@@ -124,10 +94,25 @@ tests, a static-analysis configuration, and CI.
12494

12595
### Added
12696

97+
- `Test-AppxBackupCompatibility -CheckCapabilities` is now implemented. The
98+
package's declared capabilities are classified against
99+
`Config/CapabilityClassification.json` into restricted (gated by Microsoft, and
100+
the entries most likely to make a sideloaded restore behave differently from the
101+
original), device (user consent at first use) and general. Restricted
102+
capabilities add a warning, and the result object gains
103+
`DeclaredCapabilities`, `RestrictedCapabilities`, `DeviceCapabilities` and
104+
`CapabilitiesChecked`. The classification lives in configuration so it can track
105+
new Windows capabilities without a code change.
127106
- `tests/` — 73 Pester tests covering path validation, external process execution,
128107
SDK discovery, configuration loading, and the manifest/loader/disk agreement that
129108
defines the public surface. Written in the subset shared by Pester 5 and 6. Every
130109
defect listed above has a regression test that fails against the old behaviour.
110+
- End-to-end packaging tests under `tests/`, tagged `E2E`. They build a synthetic
111+
but valid package through the real Windows SDK MakeAppx — including a negative
112+
case asserting that a failed run surfaces the tool's own error text — and are
113+
excluded from the default run. Run them with `build.ps1 -Task Test -IncludeE2E`;
114+
they skip cleanly without the SDK. CI runs them as a separate step on
115+
windows-latest, which ships the SDK.
131116
- `build.ps1` — one entry point for `Build`, `Analyze` and `Test`, used by both
132117
contributors and CI so that local and CI results mean the same thing. `-CI`
133118
produces NUnit test results and a CSV of analyzer findings, and sets the exit code.
@@ -138,16 +123,18 @@ tests, a static-analysis configuration, and CI.
138123
artefacts produced by running the module in place.
139124
- This changelog.
140125

126+
- Removed three private parameters that were accepted and ignored:
127+
`-ValidateSchema` (`Get-AppxManifestData`), `-CreateBundle`
128+
(`New-AppxPackageInternal`) and `-OutputDirectory` (`New-AppxBackupManifest`).
129+
No public surface change.
130+
- The analyzer gate is now clean and CI blocks on warnings, not just errors. The
131+
pre-existing warnings were resolved: genuinely dead variables removed,
132+
discarded call results made explicit with `$null`, safe-fallback catches given
133+
non-throwing acknowledgements, and the logger's deliberate silent catches
134+
suppressed at function level with justification.
135+
141136
### Known issues
142137

143-
- PSScriptAnalyzer reports 35 warnings that predate this release: unused variables
144-
and parameters, and deliberately silent catch blocks in the logger. CI blocks on
145-
errors and reports warnings without failing. See "Recommended next steps" in
146-
`README.md`.
147-
- Four declared parameters are accepted but ignored: `-CheckCapabilities`
148-
(`Test-AppxBackupCompatibility`), `-ValidateSchema` (`Get-AppxManifestData`),
149-
`-CreateBundle` (`New-AppxPackageInternal`) and `-OutputDirectory`
150-
(`New-AppxBackupManifest`). Only the first is on a public command.
151138
- PSScriptAnalyzer 1.25 raises an internal `NullReferenceException` while inspecting
152139
`AppxBackup.psm1` through an absolute path. Analysis still completes and returns
153140
the full finding set; `build.ps1` reports the condition instead of failing on it.
@@ -176,8 +163,8 @@ tests, a static-analysis configuration, and CI.
176163
- Initial 2.x line: ZIP-based dependency packaging (`.appxpack`) with installation
177164
orchestration, native certificate management, and MSIX support.
178165

179-
[Unreleased]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.1.0...HEAD
180-
[2.1.0]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.0.2...v2.1.0
181-
[2.0.2]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.0.1...v2.0.2
182-
[2.0.1]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.0.0...v2.0.1
166+
[Unreleased]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.1.0-post1...HEAD
167+
[2.1.0]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.0.2-post1...v2.1.0-post1
168+
[2.0.2]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.0.1-post2...v2.0.2-post1
169+
[2.0.1]: https://github.com/DeltaGa/AppxBackup.Module/compare/v2.0.0...v2.0.1-post2
183170
[2.0.0]: https://github.com/DeltaGa/AppxBackup.Module/releases/tag/v2.0.0

0 commit comments

Comments
 (0)