psadt-deploy-skill 0.28.0 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +27 -38
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -172,7 +172,7 @@ The app's **native installer is always the default**. Everything else is opt-in
172
172
  - **Self-update** — `scripts/Update-PsadtSkill.ps1` compares against GitHub, shows what changed, and
173
173
  updates in place on your confirmation (`git pull --ff-only` for a clone, otherwise a branch-zip overwrite
174
174
  of tracked files only). Machine-local state is never touched. Say *"psadt update"*.
175
- - **441 Pester tests** over the helper scripts, including drift guards that fail when the docs and the code
175
+ - **503 Pester tests** over the helper scripts, including drift guards that fail when the docs and the code
176
176
  disagree.
177
177
 
178
178
  ## Requirements
@@ -347,7 +347,7 @@ psadt-deploy/
347
347
  │ ├─ appendix-a-errors.md … -q-drivers.md one file per appendix
348
348
  │ ├─ Report-Template.html the fixed dossier template
349
349
  │ └─ app-registration.md THE Graph permission matrix + manual portal route
350
- └─ tests/ Pester suite, 441 tests
350
+ └─ tests/ Pester suite, 503 tests
351
351
  ```
352
352
 
353
353
  Machine-local state lives outside the skill folder:
@@ -368,7 +368,7 @@ psadt-package.json identity · gate decisions · research
368
368
  ## Status
369
369
 
370
370
  In active use for the full build → package → test → dossier workflow, with the direct Graph upload
371
- verified against a live tenant. The helper scripts are covered by 441 Pester tests.
371
+ verified against a live tenant. The helper scripts are covered by 503 Pester tests.
372
372
 
373
373
  One open point, honestly: **the driver `pnputil` exit-code semantics are documented, not verified here.**
374
374
  `0` / `259` / `3010` and the two `0xE...` failures come from Microsoft's documentation; confirming them
@@ -429,38 +429,27 @@ The two most recent releases are below. **[CHANGELOG.md](CHANGELOG.md)** carries
429
429
  every release since 0.1.0, and nothing is ever removed from it - this section is a window onto it, not a
430
430
  second copy to keep in sync.
431
431
 
432
- ### 0.28.0 - 2026-09-11
433
- - **Fixed: a space in the `.wsb` path silently disabled every custom mapped folder.** `Start-Process
434
- -ArgumentList` does not quote its elements, so Windows Sandbox booted with the built-in shares only -
435
- no error, no warning. A username with a space in it is enough, and it reads exactly like an upstream
436
- Sandbox bug.
437
- - **Fixed: `<LogonCommand>` never ran** on the affected Sandbox app version
438
- ([#125](https://github.com/microsoft/Windows-Sandbox/issues/125)). The work folder is now mapped onto
439
- the guest's Startup folder and a trigger `.cmd` starts the runner, which lives one level down because
440
- Startup auto-executes only `.exe/.bat/.cmd/.lnk/.vbs`.
441
- - **Fixed: a transient read reported a real result as empty** - a detection step captured `stdout: ""`
442
- while the same file, re-read at the end of the run, held the right answer. The read now retries.
443
- - **Changed: `schtasks` failures are checked** instead of surfacing as a 900-second timeout, and the
444
- runner verifies it is elevated before the first action - a Startup item does not carry the full admin
445
- token by construction the way `<LogonCommand>` did.
446
- - **Added: NSIS MultiUser needs an explicit `/allusers` or `/currentuser`** (App. L.7). A bare `/S`
447
- exits in under a second with no output and nothing installed. Now a Gate 2 decision.
448
- - **Added: an unbundled runtime prerequisite is researched in Phase 2 and decided at Gate 1**, and a
449
- manual interactive test is offered after a GREEN Phase 6 - the loop proves the package works, never
450
- that the app does. Suite 484 -> 493.
451
- ### 0.27.1 - 2026-09-10
452
- - **Fixed: the dossier invented facts about the package and printed them as statements.** Found while
453
- packaging two real apps to test 0.27.0. Without `-Metadata`, the report claimed `_Beschreibung folgt._`
454
- as the Company-Portal text — which is copied into Intune verbatim and reads like a finished field —
455
- plus `Start-ADTMsiProcess` and "Nutzerdaten bleiben erhalten" as the hook contents, for whatever package
456
- happened to be reported on. A WinMerge package that only ever calls `Start-ADTProcess` with Inno Setup
457
- switches was described four times as using a cmdlet it never touches. Nothing marked any of it as a guess.
458
- - **Hooks and the cmdlet list are now read out of the real launcher by AST**, per `*-ADTDeployment`
459
- function. No launcher to read means `nicht ermittelbar / not derivable` instead of a plausible list. An
460
- explicit `-Metadata` value still wins.
461
- - **A missing description warns and is marked visibly — and is refused outright when
462
- `decisions.upload = true`**, in the same shape as the existing SYSTEM-test gate.
463
- `-AllowMissingDescription` is the deliberate, visible opt-out.
464
- - **The header status is derived from the evidence** instead of defaulting to `Upload-bereit - getestet`.
465
- - **SKILL.md Phase 8** now says the description is mandatory; before, it only said how to format it.
466
- Suite 474 → 484.
432
+ ### 0.29.1 - 2026-09-14
433
+ - **Fixed: Phase 5.5 mapped `Remove-MSIApplications` to `Remove-ADTApplication`**, which v4 does not
434
+ have - the v4 name is `Uninstall-ADTApplication`. The table's right column is now checked against the
435
+ installed toolkit's `FunctionsToExport`.
436
+ - **Fixed: Appendix A named 60012 as the v4 deferral code.** 4.1.x exits a deferral with
437
+ `UI.DeferExitCode`, default 1602. Deliberately NOT added to the mandatory Intune table - every install
438
+ command this skill writes runs `-DeployMode Silent`, where a deferral cannot happen.
439
+ - **Fixed: the Phase 4.3 MSI sample** put the `.mst` in `SupportFiles\` and passed an `-ArgumentList`
440
+ identical to the config defaults. The `.mst` belongs in `Files\` next to the MSI (`TRANSFORMSSECURE=1`);
441
+ extra properties go into `-AdditionalArgumentList`, because `-ArgumentList` REPLACES the defaults.
442
+ - **Fixed: README claimed 441 Pester tests** in three places. Suite 501 -> 503.
443
+ ### 0.29.0 - 2026-09-11
444
+ - **Fixed: the 0.28.0 Startup-folder trigger could not run a single task as SYSTEM.** The runner passed
445
+ the elevation check, yet `schtasks /Create` and `/Run` returned 0 while the task never executed - every
446
+ action timed out blaming the package. `<LogonCommand>` is back; #125 is left to the host's DONE.txt timeout.
447
+ - **Fixed: `schtasks`' stderr notice ended the run before the first action** - in WinPS 5.1 a `2>file`
448
+ redirect does not stop the terminating `NativeCommandError`; the preference is lowered around the call.
449
+ - **Fixed: the sandbox image lacked `de-DE\ArchiveResources.psd1`**, which PSADT needs just to import,
450
+ and **WMI refused SYSTEM** (`Win32_ComputerSystem` -> `0x80070005`), which `Open-ADTSession` needs.
451
+ Both surfaced as 60008 on every action with no log. `GuestPrepare` ships the host's module resources
452
+ into the guest and repairs the WMI repository.
453
+ - **Added: three canaries before the loop** (SYSTEM task, toolkit import, toolkit session), **a 60008
454
+ action is re-run once via `powershell.exe -File` to capture the stderr the `.exe` discards**, and a
455
+ **heartbeat in the guest console** so a healthy install no longer looks like a hang. Suite 493 -> 501.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "psadt-deploy-skill",
3
- "version": "0.28.0",
3
+ "version": "0.29.1",
4
4
  "description": "Installer for the psadt-deploy Claude Code skill: build, test and deploy PSADT v4.x Intune Win32 packages.",
5
5
  "keywords": [
6
6
  "psadt",