Skip to content

TheCleaners 1.0 implementation plan

Updated September 18, 2026. Non-lab delivery readiness and the approved 0.0.15-beta prerelease publication are complete. Zensical PR #41 and temp-safety PRs #42, #43 and #44 are merged; issues #26, #30, #28 and #29 are closed. This change completes the final documentation-source reconciliation; its delivery acceptance belongs to its own PR-head and merged-source evidence. Windows client/server, IIS, Exchange, and profile lab validation is deferred future work, not underway. The published prerelease and bounded issue closures remain separate from final 1.0 product and release acceptance.

Status conventions

Open means work has not been completed. Implemented in draft is reserved for code in an unmerged branch or pull request. Merged implementation means the code is on main, but applicable validation may still be open. Validated requires passing evidence for the exact referenced commit and scope. Release accepted additionally requires every applicable product, artifact, deployment, metadata, and maintainer gate.

Reviews naming Astra, Sol or Terra below are independent model reviews posted as GitHub COMMENT reviews. Their model-approval judgments do not assert a separate human GitHub approval or replace maintainer release acceptance.

The manifest stays on the current prerelease version during this packet. No command is advertised as stable merely because it is exported. The plan is milestone/gate-driven, not a promised calendar deadline.

Accepted decisions

  • Windows only. Minimum Windows PowerShell 5.1; include Microsoft-supported PowerShell 7 release lines on Windows. Before RC, CI must cover 5.1 and every 7.x line still in support, unless the maintainer explicitly narrows the contract. Do not promise retired, preview, or future 7.x versions.
  • Add -RemoveEmptyDirectory to Clear-CurrentUserTemp and Clear-WindowsTemp. Without it, directories are untouched. With it, prune only directories emptied by this invocation and their now-empty ancestors, deepest-first. Preserve cleanup roots, unrelated pre-existing empty branches, reparse points, and paths outside the approved root.
  • Rename private Show-TCLogo to Show-TheCleanersLogo; rename public Start-Cleaning to Get-TheCleaners. Retain Start-Cleaning as a deprecated alias through 1.x.
  • Canonical documentation is https://day3bits.com/TheCleaners/, matching the working title-case GitHub Pages URL. This supersedes the earlier lowercase-canonical decision. Keep the source repository as the manifest's ProjectUri. Do not use a documentation URL as an Updatable Help endpoint unless the required HelpInfo artifacts actually exist.
  • Keep Exchange discoverable in 1.0, but structurally incapable of deletion. Require explicit -WhatIf, fail before discovery when it is absent/false, and do not silently force a preference or run IIS cleanup.
  • A later minor release may add a per-invocation Exchange -AllowRemoval switch after acceptance. This is provisional: the maintainer accepted it for now, not as an irreversible permanent design. There is no persistent unlock and no removal flag in the 1.0 implementation.
  • IIS may ship as stable only after its gates pass. Until then, keep it structurally preview-only rather than delaying ready commands.
  • Zensical PR #41 merged with pinned Zensical 0.0.62 and issue #26 is closed. Its canonical merged-source deployment is verified below. The lowercase project prefix is handled by the separately owned account-root Pages site; companion SamErde/samerde.github.io#13 also merged. That compatibility path uses a JavaScript fallback from a 404 page, not an HTTP redirect. Do not add case-only alias directories that collide on Windows or describe project-relative redirects as account-root routing.
  • Use a GitHub environment for publishing: required maintainer review, restricted release tags, and an environment-scoped credential. Configuration, credential readiness, actual publication, and published-install evidence are separate gates.
  • Every successor prompt begins with a very succinct Completed / Remaining summary from this ledger and carries that requirement forward. Save prompts without automatically executing them.

Release sequence

Milestone Entry/exit criteria
1.0 preview Implement the new safety boundaries, naming, output contracts, quiet imports, and repeatable tests; permit necessary API corrections.
1.0 beta Temp cleaners and non-destructive commands pass fixture behavior tests; freeze most signatures; explicitly disclose that lab validation is future work and not underway. IIS and Exchange remain preview-only. A beta label does not establish product acceptance.
1.0 RC Every stable command has evidence for its supported configurations; incomplete IIS remains preview-locked; exact packaged module passes all required runtimes, help, and installation checks. Accept only defect, safety, documentation, and packaging corrections.
1.0 stable Publish the tested artifact with aligned version/tag/metadata and a successful clean-install check. No feature can become destructive merely by changing a maturity label.
Later Exchange minor First release an Exchange-enabled prerelease; validate paths, file patterns, custom drives, locks, access failures, protected database/transaction-log locations, and post-cleanup service health. Reconfirm the provisional per-invocation opt-in before activation.

Current non-lab delivery sequence

Completed: Non-lab delivery and protected 0.0.15-beta publication with fresh Gallery-install verification; merged Zensical PR #41 and verified canonical deployment; issues #30, #28 and #29 in merged PRs #42, #43 and #44; and the final documentation-source reconciliation in this change. All three temp packets have independently reviewed exact-head runtime/artifact evidence, and their issues are closed.

Remaining: Complete this change's ordinary PR-head and merged-source delivery verification if it is not already recorded in the PR. After that, no further non-lab follow-on is authorized or required. TC-001 product acceptance, TC-003 through TC-007 labs and final TC-008/009 product/release acceptance remain deferred future work and require a later maintainer-directed resumption.

Bundle Bounded work and exit evidence Current status
1. Documentation and delivery readiness Use title-case URLs throughout; deploy the exact strict-build output once; retain and compare site files/digests and verify navigation at the deployed URL. Configure publishing controls, validate publisher refusal paths and rehearse publish/install against an isolated local repository. Validated for exact merge 345f06c861b6d4074e5896e0b27a19f869dfa7e3: deployed bytes/navigation, runtime/archive matrix, publisher refusal paths, local-feed rehearsal, environment rules, credential presence, actual approval, and protected publication all have retained evidence.
2. Prerelease preparation Select an unused alpha/preview or beta version, reconcile release history, align manifest/version/tag/release notes, and validate the exact candidate artifact across required hosted runtimes. Describe labs as deferred and preserve preview locks. Prepare a concrete release for maintainer approval. Validated and approved. Exact source 345f06c861b6d4074e5896e0b27a19f869dfa7e3, version 0.0.15-beta, tag v0.0.15-beta, release notes/history, and archive SHA-256 1c8e061278e68c2e1537186709f79606735c6dda2e48b5cf65a4a877699e3383 are aligned.
3. Optional prerelease publication and installed-artifact verification After explicit approval, publish the exact tested artifact through the protected environment; install that exact Gallery version in fresh Windows CI environments, verify package payload and metadata, quiet import, help, aliases, exports and preview locks, and retain version/commit-bound evidence. Validated for 0.0.15-beta by protected run 35268852573 and its retained fresh-install reports. This is prerelease/process evidence; final 1.0 needs its own artifact, approval, publication, installed-package evidence, and product acceptance.
4. Zensical migration follow-up (issue #26) Preserve navigation and exact-byte delivery controls; keep lowercase compatibility at the account-root boundary. PR #41 merged as af330858b41335366476f0b845e3f73a3c1497d1; issue #26 and companion account-root PR #13 are closed/merged. Run 35282935445 and an independent live recheck verified all 36 canonical files and required navigation; the 404/JavaScript fallback is not an HTTP redirect.
5. Bounded temp issue closure Complete explicit deterministic acceptance criteria without substituting fixture evidence for broad OS/product labs. Issues #30, #28 and #29 merged in PR #42, PR #43 and PR #44. Their final reviewed heads passed the supported hosted runtime/artifact matrix; exact merged-source evidence is recorded below. This change completes the final documentation-source reconciliation.

The prerelease delivery sequence, issue #26 migration, PR #42/#43/#44 merges and this final documentation-source reconciliation are complete. If this change's PR-head or merged-source delivery evidence is not yet recorded in its PR, verify it there without creating another documentation-only follow-up. Do not select these implemented packets again as fresh work or start labs without new maintainer direction and approved disposable-host prerequisites.

The previous next stage (DELETE-PENDING, ROOT-RACE, HANDLE-RECOVERY fixture drivers and evidence-schema regressions) is deferred with the lab work. Do not resume provisioning, actual-root acceptance, IIS/Exchange labs, or profile acceptance automatically. Preserve the runbook and case inventory for a later maintainer-directed resumption. TC-001 product acceptance, TC-003 through TC-007 acceptance, and final stable-release acceptance remain open. No IIS/Exchange removal or 1.0 Exchange -AllowRemoval is introduced.

See publishing controls and the copy-ready recovery prompt. The historical issue #26 checkpoints below describe their original pre-merge state; the current summary and verified merged-source evidence supersede those pending instructions.

September 18 issue #28 directory-identity packet

Merged implementation: PR #43 merged as 0829d076ac13095ed016c54ea96c4a8b6abd8287 and closed issue #28. Its directory-identity packet adds 14 cases across both public temp commands. They verify retained-handle prevention with native sharing violation 32, native identity refusal after explicitly injected handle loss with empty/populated replacements and matching metadata, normal deepest-first pruning, preservation boundaries, WhatIf and terminating errors. No executable runtime changes were required.

Exact reviewed head 12db558565d39e1a52c726160a6b4014b72cf5ff passed build 35336487649: PS7.4.20/7.5.11/7.6.6 each passed 347 unit plus four integration tests; PS5.1.26100.33296 passed 351 combined tests, all with zero failures/skips/not-run. PS7 coverage was 88.05% (1,636/1,858). All eleven artifact-wrapper digests, runtime/source reports, ACL and local-feed evidence and repeated/cross-runtime archives were independently inspected; the archive digest matches PR #42 below. Terra high independently approved Sol high's implementation; Copilot and CodeRabbit completed reviews and all six review threads were resolved before the exact-head guarded merge. Merged-source build 35338162068, analyzer 35338162047 and documentation run 35338162004 all passed for merge 0829d076ac13095ed016c54ea96c4a8b6abd8287; the documentation deployment verified 38 files at tree digest 02edb319e5155a4570711a0496453525ee387163f38629d621224bdfd5467c50 and deployment commit d139298e943cce2f0de4648c3b4debfc10014af9.

Historical clean integration 171b4cc558b875f72ffedd68aa051d6aeac6e43e passed 18/18 local tests before the metadata-matching refinement. Correction 2372a218d04354df100c2d9188bc30c419764151 passed 18/18 locally but its hosted build failed on two unused test-display parameters, removed in da99d4ebdd0e8c76cba332eb506e06d2eda43691. Final clean head 12db558565d39e1a52c726160a6b4014b72cf5ff passed 18/18 (14 fixtures plus four documentation contracts) on PowerShell 7.6.6 and Windows PowerShell 5.1.26100.9444, Pester 5.7.1, Windows 10.0.26200.0, with zero failures/skips/not-run. Strict Zensical 0.0.62, parser and PR-range whitespace checks passed. The evidence note distinguishes each historical scope. Issue #29 later merged as recorded below; broader TC-003/004 and product/release gates remain open.

September 18 issue #29 deletion-rights packet

Merged implementation: PR #44 merged as 6fd8af169da631d17579a3c7eb3fa0aa8b285be0 and closed issue #29. Its deletion-rights packet adds 12 cases covering both temp commands with real NTFS read-denied/delete-allowed and delete-denied ACLs, errors/Stop/reconciliation, disappearance/directory substitution, every byte of the 128-bit native identity, volume identity and invalid-handle fail-closed behavior. The suite initializes native interop independently and verifies terminating ACL setup and restoration. No executable runtime change was required.

Exact reviewed head abe5f4275b2d5b9a7a510aa0759413dbcf91a727 passed build 35339431249: PS7.4.20/7.5.11/7.6.6 each passed 359 unit plus four integration tests; PS5.1.26100.33296 passed 363 combined tests, all with zero failures/skips/not-run. PS7 coverage was 88.05% (1,636/1,858). Independent inspection verified all eleven artifact wrappers, source/runtime reports, NUnit results, ACL and local-feed evidence, and repeated/cross-runtime archives. The archive remained 19 files and 224,558 bytes with SHA-256 5153966aaef9f194fdf60fe8793989f4693dcd3310b10c4223d6208865d0135f. Astra high independently approved the Sol high implementation; Copilot completed review, all five review threads were resolved, and the CodeRabbit quota-skipped review remained incomplete rather than an approval. Merged-source build 35340908362 passed at 6fd8af169da631d17579a3c7eb3fa0aa8b285be0 with the same runtimes, counts, zero failure/skip/not-run result, 88.05% coverage and archive digest; all eleven retained artifacts were independently verified. Merged-source analyzer 35340908372 passed. Documentation run 35340908280 and an independent live check passed all 39 files and required navigation at deployment commit 4ccfa644f43ac0af18778a5a750cde6e9f5ea2fa and tree digest 0e54c5549e571ace9642febaab15d8acef927f43f313346df300dccad200da41. Official Microsoft API documentation determines the ReFS identity design; ReFS runtime tests remain explicitly unexecuted TC-003/004 acceptance.

September 18 issue #30 retention packet

Merged implementation: PR #42 merged as 3d07e9ccbfd441c388b1a3a69edc92fc326a4a66 and closed issue #30. Its deterministic contract packet adds 28 native/public-command regression cases and updates source help, command references and safety guidance. The same-handle runtime behavior is unchanged. The documented retention decision uses the timestamp observed from the deletion handle; attribute-only updates after that observation are outside an atomic guarantee.

Exact reviewed head 719750ce8c7fd3142b24261b8b75d09499e9f840 passed build 35330950539: PS7.4.20/7.5.11/7.6.6 each passed 333 unit plus four integration tests; PS5.1.26100.33296 passed 337 combined tests, all with zero failures/skips/not-run. PS7 coverage was 87.73%. All eleven artifact-wrapper digests, runtime/source-bound reports, repeated/cross-runtime archives, ACL and local-feed rehearsal evidence were independently verified. The 19-file, 224,558-byte archive SHA-256 was 5153966aaef9f194fdf60fe8793989f4693dcd3310b10c4223d6208865d0135f. Sol high independently approved the Astra high implementation; Copilot and CodeRabbit completed reviews and the final paginated audit found zero review threads. This is PR-head evidence; the distinct merged-source result follows.

Merged-source build 35332020558 passed at 3d07e9ccbfd441c388b1a3a69edc92fc326a4a66: PS7.4.20/7.5.11/7.6.6 each passed 333 unit and four integration tests, and Windows PS5.1.26100.33296 passed 337 combined tests, with zero failures/skips/not-run. Independent inspection verified all eleven artifact wrappers, exact source/runtime reports, 87.73% PS7 coverage, ACL evidence, local-feed rehearsal and repeated/cross-runtime archive equality with the same package digest above. Merged-source analyzer 35332020450 passed. Documentation deployment 35332020512 and an independent live check verified all 37 canonical files and required navigation against the retained site manifest.

The earlier local integration checkpoint below is historical pre-merge evidence. Exact clean integration commit 1f6a28e1da328440f1942c66648e9991ba3c5522 passed 28 new fixture cases and four documentation contracts (32/32) under PowerShell 7.6.6 and Windows PowerShell 5.1.26100.9444, with Pester 5.7.1 on Windows 10.0.26200.0. Both runs had zero failures/skips/not-run tests; strict Zensical 0.0.62 and configuration validation passed. The issue evidence records the test hash and scope. This local checkpoint alone was not merge evidence; the exact final-head and merged-source results above supersede its then-outstanding hosted checks. Issues #28 and #29 later merged. TC-001 product acceptance, TC-003 through TC-007 lab acceptance, and final TC-008/009 release acceptance remain open.

Issue #26 Zensical migration checkpoint

PR #41 opened from exact initial head 1063c8400609c68c9fe1348d24a191a25905a321. Local evidence for that head used Python 3.14.6 and Zensical 0.0.62. The Python suite reported 29 tests: 28 passed, 0 failed, and 1 symbolic-link test skipped because this host did not permit symbolic links. The focused documentation contract passed 4/4 with zero failures, skips, or not-run tests under PowerShell 7.6.6 and Windows PowerShell 5.1.26100.9444. Configuration validation, the strict clean build, actionlint, git diff --check, and old/new eight-entry navigation comparison passed. The exact local site manifest (local-site-manifest.json) verified 36 files, 1,574,983 bytes, empty .nojekyll, and tree SHA-256 a6c1740cbd8a4965229385e38bf79939bbd0608a5a8de7ff43758392337251a0; local-validation-summary.json records the full checkpoint.

Build run 35278067004 was still in progress for initial head 1063c8400609c68c9fe1348d24a191a25905a321 when this checkpoint was written. Completed jobs or a later final conclusion for that run apply only to the initial head. Review corrections create a new candidate that requires its own exact-head checks; neither run establishes merge or deployment acceptance.

September 17 delivery checkpoints

The documentation foundation merged in PR #38 as aad712ac09cf97ef21f1ce05991f735bfdbe6d9d. Its reviewed PR head e338c295f9b5378cb9ffd37c90318e7614f97fd9 passed build 35253305417 and analysis 35253305364: PowerShell 7.4.20, 7.5.11 and 7.6.6 each passed 267 unit and 4 integration tests; Windows PowerShell 5.1.26100.33296 passed 271 combined tests. All had zero failures/skips/not-run tests; PS7 coverage was 87.51% (1,626/1,858). All eleven retained artifact wrapper digests, package manifests, ACL evidence and repeat/cross-runtime archives were inspected. Its 19-file, 223,629-byte archive SHA-256 was 2eae48784e4ba18f6aee28e3c22d8191be3e6d5bde2d59e26071430fe776f2d4. The foundation's own post-merge build, analyzer and older deployment workflow are separate checks; neither the foundation nor its previous deployment workflow establishes exact public-byte acceptance.

Delivery PR #37's reviewed head 65e973dd7a9e523f0385ca53870de345c77f0e4e passed build 35256189981: PowerShell 7.4.20, 7.5.11 and 7.6.6 each passed 305 unit plus 4 integration tests; Windows PowerShell 5.1.26100.33296 passed 309 combined tests; all had zero failures, skips or not-run tests; and the PS7 lanes measured 87.51% coverage (1,626/1,858). All 24 Python tests passed. Inspection verified all eleven artifact-wrapper digests, the local real-feed publish/acquire/duplicate-refusal and cleanup/ACL evidence, and original/repeated/cross-runtime equality for the 19-file, 224,050-byte archive with SHA-256 1c8e061278e68c2e1537186709f79606735c6dda2e48b5cf65a4a877699e3383. This is exact final-head evidence, not merged-commit build evidence.

PR #37 merged as 345f06c861b6d4074e5896e0b27a19f869dfa7e3. Its documentation run 35257555130 passed all three jobs. Independent artifact verification matched 71 retained files totaling 3,550,003 bytes with tree SHA-256 f05e2fdefd918136bf1ec215a9154499a6a5ef22b649c3bfc880831e585882d8 to gh-pages commit f75772870600c880cf4393ac635b5bdecf5b5c7b, verified the exact Git tree and all five required navigation routes, and repeated the live public check successfully. The workflow needed three complete attempts during propagation; an independent fresh live pass needed one.

The merge commit's build 35257555108 and analyzer 35257555110 passed. Each supported PS7 lane passed 305 unit plus 4 integration tests, Windows PowerShell 5.1.26100.33296 passed 309 combined tests, and every lane reported zero failures, skips or not-run tests. PS7 coverage was 87.51% (1,626/1,858). Independent inspection verified all eleven artifact wrappers, ACL evidence, actual local-feed publish/acquire/payload checks, duplicate refusal and cleanup, plus original/repeated/cross-runtime equality for the 19-file, 224,050-byte archive with SHA-256 1c8e061278e68c2e1537186709f79606735c6dda2e48b5cf65a4a877699e3383.

The first approved publication attempt, run 35266399326, passed all six release-gate jobs and normal environment review, then failed closed when PowerShell Gallery returned HTTP 403 for the credential. The exact Gallery version still returned 404 afterward, and the installed-package jobs were skipped. The environment secret was replaced without changing the approved tag, source, or archive.

The maintainer approved exact source 345f06c861b6d4074e5896e0b27a19f869dfa7e3, tag v0.0.15-beta, and that archive digest. Protected run 35268852573 exercised the required environment review, published Gallery version 0.0.15-beta at 20:20:11 UTC, and passed fresh installed-package checks on Windows PowerShell 5.1 and PowerShell 7.4.20, 7.5.11, and 7.6.6. Independent verification passed every check across all 11 jobs, 15 retained artifact wrappers and four installed-package reports. The matching GitHub prerelease, release ID 391037563, was published at 20:27:02 UTC; its archive, content manifest and sidecar were downloaded and matched the approved bytes and retained hashes. This validates the prerelease delivery process, not Windows/product labs or final 1.0 acceptance.

An earlier inventory recorded unpublished draft release ID 172666498 with label 0.0.11-alpha. After the beta prerelease was created, the full release inventory returned only release ID 391037563 and a direct read of the older ID returned 404. The beta creation targeted only v0.0.15-beta; no old-draft deletion was requested, and the cause of its disappearance is unknown.

Historical evidence recorded September 16, 2026

Historical lowercase URL observations and then-open requirements below describe their original commits. The title-case decision and current sequence above supersede those hosting requirements without rewriting the observations.

This section uses only post-merge evidence for exact commit 037c27a81234361620a633f68a33bfb370f0a03e. Earlier local results and PR-head hashes are not carried forward as merged-commit evidence. No IIS or Exchange deletion was enabled, no live cleanup was run, no release tag was created, and nothing was published to the PowerShell Gallery.

Gate Exact merged-commit evidence Boundary that remains open
Source and release identity At the PR #31 checkpoint, the manifest was 0.0.15 with prerelease label beta, PowerShell minimum 5.1, project URI https://github.com/SamErde/TheCleaners, and documentation URI https://day3bits.com/thecleaners/. The repository then had no Git tags; the Gallery served 0.0.13-alpha; and the authenticated GitHub release inventory included an unpublished private draft named Testing and Workflow Updates with draft tag 0.0.11-alpha. Final 1.0 version/tag/prerelease metadata, release notes, published artifact, and maintainer acceptance were open at that checkpoint.
Hosted PowerShell 7.6 LTS Build run 35129434807, job 104906463700 used PowerShell 7.6.6 Core on hosted Windows Server 2025 10.0.26100. Pester 5.7.1 reported 215/215 unit tests and 4/4 integration tests passed, with 0 failed, skipped, or not run. Coverage was 83.48% of 1,858 analyzed commands across 16 files. This is hosted fixture/package evidence, not complete Windows client/server, broader elevated/non-elevated, real-system-root, ReFS, IIS, or Exchange acceptance.
Hosted PowerShell 7.5 stable Build run 35129434807, job 104906463466 used PowerShell 7.5.9 Core on the same hosted Windows Server 2025 image. Pester 5.7.1 reported 215/215 unit tests and 4/4 integration tests passed, with 0 failed, skipped, or not run. Coverage was 83.48% of 1,858 analyzed commands across 16 files. Microsoft supports only the latest servicing update and now lists 7.5.11 as current. Refresh the 7.5 lane before RC. Microsoft also supports 7.4 LTS through November 10, 2026, but the workflow has no 7.4 lane; add its latest supported patch or obtain explicit approval to narrow the policy.
Hosted Windows PowerShell 5.1 Build run 35129434807, job 104907172823 used Windows PowerShell 5.1.26100.33296 Desktop on hosted Windows Server 2025 Datacenter build 26100. The combined source/package run reported 219/219 tests passed (215 unit plus 4 integration), with 0 failures, skips, inconclusive, invalid, or not-run tests. This lane downloaded and tested the exact PowerShell 7.6.6 artifact; it did not create a separate PS5.1 archive or coverage report. PS5.1 parser/API/package compatibility is evidenced; PS5.1 coverage and broader OS/product acceptance are not.
ACL and native deletion fixture The PS5.1 job created elevated NTFS fixture TheCleaners-Acl-1879c90d-b555-4f71-851d-824e8cfa5211. Exact candidates were old-readable.tmp and old-delete-without-read.tmp; before/after counts were 2 -> 0; ReadWasDenied=true; delete/read masks were 65536/1; FilesRemoved=2; BytesReclaimed=6; status Completed; skips, failures, cleanup errors, and result error IDs were 0; reconciliation and Acceptance were true. This is one isolated elevated NTFS fixture. It does not establish complete Windows client/server, broader elevated/non-elevated, real-system-root, or ReFS acceptance.
Exact artifacts and clean install Both PS7 lanes produced a 19-file TheCleaners_0.0.15.zip manifest whose commit is 037c27a81234361620a633f68a33bfb370f0a03e; every packaged file hash is identical between lanes. The 7.6.6 ZIP is 43,141 bytes with SHA-256 adf7d3fb6e693a0e559ce560fc5c83ee8254d7ecad9115061c836d293a6705f4. The 7.5.9 ZIP is 43,051 bytes with SHA-256 31f710cd62fd04d4b0e41261054158df7527b9bc84a425755fd436044d89164d. Each lane verified its manifest/sidecar, packaged help, quiet import, aliases, preview locks, extraction, and isolated module-name clean install. The PS5.1 lane repeated the integration checks against the downloaded 7.6.6 artifact. The different ZIP bytes/hashes show that cross-runtime archive reproducibility is not established even though the 19-file content set is identical. Publication remains protected and unexecuted; published clean-install evidence is open.
Static analysis PSScriptAnalyzer run 35129435005 succeeded for the exact merged commit and uploaded SARIF. Static analysis is not runtime, product, lab, or release acceptance.
Documentation and deployment MkDocs run 35129434855 checked out the exact merged commit, completed mkdocs build --strict --site-dir site, and verified site/index.html and site/sitemap.xml. Its later mkdocs gh-deploy --strict --force command performed a second strict build and pushed gh-pages commit 2ea8bf4; the workflow does not establish byte identity between the checked site directory and deployed output. A live check then found uppercase /TheCleaners/ HTTP 200, uppercase without slash HTTP 301 to /TheCleaners/, and canonical lowercase /thecleaners/ HTTP 404. Strict build and deployment workflow succeeded, but exact deployed-byte verification and canonical lowercase deployment did not. The site-owner correction remains open; this sweep did not modify external deployment.
IIS and Exchange product labs No exact-merged-commit product/build lab evidence exists. Unit tests use fixtures/mocks; they verify fail-closed preview behavior but are not product acceptance. Disposable IIS and Exchange labs must record exact product/build, complete candidate lists, before/after counts, protected paths, and service health. Both commands remain preview-only and deletion-disabled.

TC-008 merged runtime and archive evidence after PR #33

Baseline verified: PR #32 merged as d9ba8783d844f8ad2458817c967a5cf79a676658; stage-entry main was 49154d6b130fc8bc8f6c47122db991a261c0b29d. PR #33's final green head was 2d6724b2f4c13b8a65f555d1161e45bb9ca07084; it merged as fdadbee08f854b1af6fdc7654ae4532ebbf605df. Candidate and historical failure evidence retain their original commit labels and are not relabeled as merged evidence.

Merged implementation; runtime-matrix and bounded PS7 Windows archive-reproducibility subgates validated for exact commit fdadbee08f854b1af6fdc7654ae4532ebbf605df. TC-008 as a whole remains open. Build run 35152376944 and PSScriptAnalyzer run 35152376977 both identify that exact merge commit. Fresh downloads of all retained reports, manifests, sidecars, original ZIPs, and repeated ZIPs matched the preserved evidence bundle byte-for-byte.

Exact merged job Runtime and hosted result
PowerShell 7.4 LTS PowerShell 7.4.20 Core, .NET 8.0.31, Pester 5.7.1, Windows Server 2025 10.0.26100: 222/222 unit and 4/4 integration tests passed; 0 failed, skipped, or not run. Coverage was 83.48% (1,551/1,858 commands across 16 files).
PowerShell 7.5 stable PowerShell 7.5.11 Core, .NET 9.0.20, Pester 5.7.1, Windows Server 2025 10.0.26100: 222/222 unit and 4/4 integration tests passed; 0 failed, skipped, or not run. Coverage was 83.48% (1,551/1,858 commands across 16 files).
PowerShell 7.6 LTS PowerShell 7.6.6 Core, .NET 10.0.12, Pester 5.7.1, Windows Server 2025 10.0.26100: 222/222 unit and 4/4 integration tests passed; 0 failed, skipped, or not run. Coverage was 83.48% (1,551/1,858 commands across 16 files).
Windows PowerShell 5.1 Windows PowerShell 5.1.26100.33296 Desktop on Windows Server 2025 Datacenter build 26100: 226/226 combined tests passed; 0 failures, skips, inconclusive, invalid, or not-run tests. No coverage report was produced. This lane downloaded and tested the canonical 7.6.6 artifact and ZIP; it did not produce a canonical PS5.1 archive.
Archive comparison Each 7.4.20, 7.5.11, and 7.6.6 TheCleaners_0.0.15.zip and TheCleaners_0.0.15.zip.repeat.zip contains 19 files, is 223,629 bytes, and has SHA-256 2eae48784e4ba18f6aee28e3c22d8191be3e6d5bde2d59e26071430fe776f2d4. Every manifest records the exact merge commit; original/repeated and cross-runtime bytes match.
Strict documentation and PSScriptAnalyzer Comparator regressions, strict MkDocs build, change-range whitespace validation, and the separate analyzer/SARIF job passed. All seven build/analyzer check annotation endpoints returned zero annotations.

The pinned download action is actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c (v8.0.1). Its immutable manifest declares Node 24 and defaults digest mismatches to errors. The merged comparison job verified all three expected artifact digests, and the PS5.1 job verified both canonical 7.6.6 download digests. The protected publisher was not run.

The stored-ZIP contract is intentionally bounded to identical staged paths and contents on the tested, pinned PS7 Windows builders and dependencies. It does not promise byte identity for future runtimes, other operating systems, different line endings, or changed help generators. Runtime-bearing manifests outside the ZIP intentionally differ. PS5.1 is a supported consumer, but its .NET Framework ZIP writer is not a canonical producer. The historical ZIP investigation and earlier PR-head failures remain documented in packaging and the retained evidence report under their original identities.

PR #33 had three review threads; all were addressed and resolved, and post-merge pagination found zero unresolved threads. CodeRabbit's green status was quota-skipped and is not counted as a completed review or approval. The automatic MkDocs deployment run 35152376955 passed for the merge commit, but its unchanged deployment workflow does not establish lowercase canonical hosting or deployed-byte identity.

At the PR #33 checkpoint, no Windows/IIS/Exchange product acceptance, live cleanup, Gallery publication, version/tag change, canonical-host correction, or release acceptance was performed. The source was 0.0.15-beta; protected publication, published installation, the uncovered-branch risk review, and maintainer release acceptance were then open. The current non-lab sequence supersedes that historical readiness status.

TC-008 uncovered-command review after PR #34

The bounded risk review maps every missed instruction in PR #34's exact merged-commit coverage (3cb0293487c6f08e7fdea6bff30e29cf1169d766, run 35168283878): 307 commands across 254 source lines. It records new regressions, existing direct/subprocess coverage, defensive-only guards, and platform/product/concurrency lab cases. The source review is complete and found no confirmed runtime defect. At that checkpoint, thirty focused test cases were draft pending PR #35; the next section records their merge and exact validation. No runtime/API/workflow/release metadata changes were made in the review packet.

This closed only the bounded analysis of that coverage baseline. It did not close TC-008 as a whole or any Windows/IIS/Exchange/profile product acceptance gate. At that checkpoint, protected publication, published installation, hosting, and maintainer release acceptance remained open; current delivery status is recorded in the non-lab sequence. The remaining lab variants stay assigned to TC-003 through TC-007.

TC-003/004 disposable acceptance preparation after PR #35

PR #35's exact merge is 66119785413b8cd3b2004f1b9fc7f49bed504a6a. Its build 35218687207 passed 252 unit plus four integration tests in each PS7.4.20/7.5.11/7.6.6 lane and 256 combined tests in PS5.1.26100.33296, with zero failures/skips/not-run. PS7 coverage was 1,626/1,858 commands (87.51%); PS5.1 emitted no coverage. The baseline review is merged and complete; its 232 remaining misses retain their dispositions and native/platform lab ownership. This supersedes the earlier review packet's conditional draft wording, not its acceptance limits.

The preparation packet merged in PR #36 as 1af73897b4534dbffb3f0aa647b2d3dc4f7f31a5. The lab runbook and acceptance matrix distinguish implemented fixtures from unexecuted client/server, token, filesystem, actual-root and concurrency cases. A versioned evidence envelope records exact source/host/root identity, inventories, outcomes, missing prerequisites and recovery; it cannot itself confer acceptance. The ACL harness rejects out-of-boundary/reparse parents, holds ordinary ancestry and root identities, checks WhatIf before cleanup, reloads and verifies the hashed source module, requires OS metadata, reconciles preview/removal paths, records native candidate identities and source hashes, and emits acceptance only after restoring environment and closing handles. Recursive ACL reset/deletion is removed; its generated child remains available for inspection. Dedicated LabAclHarness.Tests.ps1 regressions cover these safeguards.

PR #36's exact merged build 35227963090 passed 267 unit plus four integration tests on each PS7.4.20/7.5.11/7.6.6 lane and 271 combined tests on PS5.1.26100.33296, with zero failures/skips/not-run. PS7 coverage was 1,626/1,858 (87.51%); PS5.1 did not emit coverage. Original/repeated PS7 archives matched at 19 files, 223,629 bytes and SHA-256 2eae48784e4ba18f6aee28e3c22d8191be3e6d5bde2d59e26071430fe776f2d4. These results apply to that merge only. URL/help changes in a later candidate change packaged inputs and require fresh artifact evidence.

At the PR #36 checkpoint, no disposable host, snapshot/restore proof, ReFS volume, alternate token, product installation, or actual-root execution approval was established. No product/actual-root acceptance was executed and no TC-003/004 acceptance checkbox was closed. A later lab stage requires named approved hosts and scenario drivers, per-case evidence and successful recovery. Exact PR-head and post-merge reports belong to the preparation PR and its completion report; generated capability alone is not validation. TC-005/006 preview labs, TC-007 profile acceptance, TC-008 publication/published installation/maintainer acceptance, and TC-009 metadata/release gates remain open; the current sequence supersedes this checkpoint's hosting status.

Work packets

ID Work Current state
TC-001 Behavioral contracts, support matrix, maturity policy, migration notes, and release ledger Merged implementation in PR #31. Exact merged-commit runtime evidence is recorded above; product/OS acceptance and release acceptance remain open.
TC-002 Naming, compatibility aliases, deterministic loader, quiet import, removal of initialization scaffolding Merged implementation in PR #31. Exact hosted package-import tests cover the loader and aliases.
TC-003 Public mutation ownership, shared result/error contracts, UTC semantics, path safety, removal of generic deletion wrapper Merged implementation includes shared result/error contracts, owning-command mutation, native temp deletion, and wrapper/helper retirement. Exact hosted cross-edition fixtures passed; Windows client/server, broader elevated/non-elevated, ReFS, and adversarial acceptance remain open.
TC-004 Temp cleaners, opt-in directory pruning, WhatIf/Confirm, locked-file/race handling, privilege/root preflight Merged implementation includes same-handle identity checks, validated root identity carried into planning, candidate-ancestor and planned-directory handles retained through mutation, pruning disqualification after vanished/skipped/failed/recent/reparse candidates, root preflight, lock/race/hard-link/reparse fixtures, actual-root/privilege checks, queued-directory replacement fail-closed handling, ACL evidence, serialized native initialization, and fresh-process confirmation probes. Exact hosted lanes passed; Windows client/server, broader elevated/non-elevated, ReFS, and real system-root acceptance remain open.
TC-005 IIS path discovery, environment expansion, per-format allowlist, deduplication, preview-only discovery, and server validation Merged preview-only implementation covers separate web/FTP discovery, configured format and rollover metadata, calendar-valid W3C monthly/daily/hourly and size-rollover families, bounded sequences, IIS/NCSA families, unknown/custom-format failure, normalized/deduplicated roots, protected paths, service metadata, and dependency restoration. No exact-commit IIS product/build lab exists; removal stays disabled.
TC-006 Exchange preview guard, experimental discovery, validated per-directory patterns, protected locations, and lab fixtures Merged preview-only implementation covers the guard, IIS decoupling, fixed-root validation, per-directory filename/ETL patterns, and database/transaction-log protection. No exact-commit Exchange product/build lab or service-health evidence exists; removal stays disabled.
TC-007 Typed stale-profile output, unknown LastUseTime, optional size, SID resolution, and command inventory Merged read-only implementation covers typed output, unknown-date handling, optional reparse-safe size with retained identity-checked handles, best-effort SID resolution, and orphan-helper retirement. Exact hosted fixtures passed; Windows client/server acceptance remains open.
TC-008 One source-layout package, exact-artifact tests/publication, reproducible build, complete runtime matrix, and CI gates Exact 0.0.15-beta evidence validates the runtime/archive gates, local-feed rehearsal, protected publication, and fresh Gallery installation. TC-008 remains open for the final 1.0 artifact, approval, publication, installed-package evidence, and release acceptance; native/platform/product lab variants remain assigned to TC-003 through TC-007.
TC-009 Complete help/docs, canonical deployment verification, changelog/history, contributor/security policy, RC and release checks Exact 0.0.15-beta documentation, metadata, protected publication, and published-install evidence is complete. Issue #26 and companion account-root PR #13 are complete; lowercase compatibility uses a JavaScript fallback from the account-root 404 page rather than an HTTP redirect. Final product and 1.0 release acceptance remain open.

TC-003/004 completion checklist

  • [x] Standardize documented result fields and stable error IDs/categories across every applicable command in the merged implementation.
  • [x] Remove the now-unused generic private deletion wrapper and its legacy tests; do not add another generic mutation layer.
  • [x] Verify every discovery error fails closed and cannot be mistaken for zero candidates in the unit and coverage-edge fixtures; hosted product acceptance remains open.
  • [x] Verify -WhatIf leaves fixture files/directories, preferences, and module/native state unchanged; real product/registry/process acceptance remains open.
  • [x] Verify -Confirm approval/decline and noninteractive behavior without nested prompts; the exact-commit hosted PS7 and PS5.1 suites passed the fresh-process Y/N and explicit -Confirm:$false fixtures.
  • [x] Add fixture coverage for hard links, junctions, symbolic links/reparse points, roots, prefix-confusable siblings, long-path syntax, access/lock failures, and files changing after discovery; skipped child handles are retained through ancestor pruning and lab validation remains open.
  • [x] Cover actual-system-root resolution and privilege reporting in fixtures rather than trusting an environment variable alone; disposable Windows client/server, elevated/non-elevated, and real system-root acceptance remains open.
  • [x] Reconcile proposed versus removed/skipped/failed files and directories; bytes are logical lengths of successfully removed files, not a guarantee of physical free-space change.
  • [ ] Complete actual Windows client/server acceptance on supported OS versions.

TC-005/006 completion checklist

  • [x] Explicitly import or qualify IIS discovery commands; handle missing optional dependencies and uninstalled products clearly in the merged implementation.
  • [x] Expand environment variables in all discovered IIS roots; normalize and deduplicate roots in the merged implementation. Product/lab evidence remains open.
  • [x] Document and unit-test merged product-root, filename-format, configured FTP-format, and retention-boundary rules; exact supported product versions and lab evidence remain open.
  • [x] Never treat every old file in an arbitrary logging tree as a safe log candidate in the merged preview implementation.
  • [x] Add merged protection for mailbox database and transaction-log paths, including overlap exclusion; live Exchange validation remains open.
  • [x] Keep IIS and Exchange deletion absent while their current preview locks apply, including legacy aliases and all parameter combinations.
  • [ ] Capture disposable product/build preview-lab candidate lists, before/after counts, protected paths, and service health before any later removal design.

TC-007 completion checklist

  • [x] Keep profile discovery read-only; remove presentation-only Out-Host behavior.
  • [x] Introduce a stable profile object with SID/account, path, last use, age, optional size, loaded/special flags, and unknown-date status.
  • [x] Treat missing LastUseTime as unknown, not automatically stale; expose it only with -IncludeUnknownLastUseTime.
  • [x] Confirm default/public/system/service profile exclusions and size-enumeration safety in fixture tests.
  • [x] Remove orphaned SID helpers unless deliberately used by profile output.
  • [ ] Complete Windows client/server acceptance for profile inventory and optional sizing.

TC-008/009 completion checklist

  • [x] Replace recursive source merging with the explicit source-layout package; preserve useful stack traces and external help in the merged build.
  • [x] Build once, record a content manifest/digest, test that artifact, and make the protected workflow publish that exact artifact without rebuilding or publishing src directly. The approved 0.0.15-beta run exercised this path.
  • [x] Implement version/tag/prerelease checks and duplicate Gallery version refusal in the publisher script.
  • [x] Configure and read back the GitHub powershell-gallery environment: September 17 live API evidence confirms required reviewer SamErde, disabled administrator bypass, custom deployment rules, and a single v* tag rule (no branch rule). Self-review is permitted so the sole maintainer can approve a manually initiated release. This is configuration evidence, not an executed approval/publication test.
  • [x] Provision the dedicated PSGALLERY_PUBLISH_API_KEY environment secret. September 17 metadata readback confirms its presence; no secret value was retrieved. See publishing controls.
  • [x] Verify the actual environment approval and credential behavior during an approved release. Protected run 35268852573 exercised both for 0.0.15-beta.
  • [x] Rehearse artifact verification, refusal paths, publication and installation against an isolated local feed without publishing to the Gallery. Exact PR #37 merge evidence records successful publish/acquire/payload checks, duplicate refusal, preview locks and cleanup.
  • [x] Complete the supported runtime matrix on exact merged commit 345f06c861b6d4074e5896e0b27a19f869dfa7e3: 7.4.20, 7.5.11 and 7.6.6 each passed 305 unit plus 4 integration tests; Windows PowerShell 5.1.26100.33296 passed 309 combined tests. Every lane reported zero failures, skips or not-run tests. Historical evidence remains labeled to its original commit.
  • [x] Re-enable the ShouldProcess analyzer rule; no broad suppression is used in the merged source.
  • [x] Meet at least 80% overall coverage in the covered hosted lanes: PS7.4.20, PS7.5.11 and PS7.6.6 each measured 87.51% (1,626/1,858 analyzed commands across 16 files) with no failed, skipped or not-run tests at exact merged commit 345f06c861b6d4074e5896e0b27a19f869dfa7e3. PS5.1 passed 309 combined tests but does not emit coverage. The original 307-command baseline review is complete; its remaining native/platform/product cases retain deferred lab ownership.
  • [x] Retain machine-readable unit and integration reports, with failed/skipped counts and exact runtime versions in the merged build.
  • [x] Generate command references and external help from the source of truth; add drift checks and validate the documentation build strictly in CI.
  • [x] Update README, migration guide, changelog, support/security policy, contributing instructions, PR template, and agent instructions.
  • [x] Review template leftovers, remove the duplicate .github/LICENSE, move editor settings to the repository-root .vscode, and retain the existing spell-check/pre-commit configuration; analyzer roles remain explicit rather than silently removed.
  • [x] Verify exact deployed bytes and navigation at canonical https://day3bits.com/TheCleaners/. Run 35257555130 tied 71 public files and all five required navigation routes to exact merged source 345f06c861b6d4074e5896e0b27a19f869dfa7e3; an independent live recheck passed. Zensical issue #26 later closed in PR #41, and companion account-root PR #13 added the lowercase 404/JavaScript fallback.
  • [x] Attach manifests and hashes to both exact hosted archive outputs and verify isolated clean installs of the tested artifacts.
  • [x] Verify the bounded stored-ZIP reproducibility contract on exact merged commit 345f06c861b6d4074e5896e0b27a19f869dfa7e3: original/repeated and cross-runtime bytes match for all three supported PS7 Windows builders at 19 files, 224,050 bytes and SHA-256 1c8e061278e68c2e1537186709f79606735c6dda2e48b5cf65a4a877699e3383; PS5.1 consumed the canonical 7.6.6 archive. Historical archives remain labeled to their original commits.
  • [x] Align and approve concrete prerelease version/tag/manifest metadata, release notes and reconciled history for 0.0.15-beta.
  • [x] Publish the approved exact 0.0.15-beta artifact and verify a clean install of that Gallery version across the supported runtime matrix. This is prerelease/process evidence only.
  • [ ] Complete final 1.0 product/release acceptance, align final metadata, publish its exact approved artifact and verify its published clean installation. A prior prerelease does not close this final gate.

Validation evidence

PR #31 adds parameterized filesystem tests for both temp commands, inclusive cutoff, literal names, junction exclusion, directory scope, WhatIf, partial failure, ErrorAction Stop, failed enumeration, a candidate replaced by a directory, a candidate disappearing before deletion, and skipped/failed candidate disqualification before ancestor pruning. It adds IIS and Exchange no-mutation/guard/root-type tests, configured FTP-format propagation, mixed-separator namespace rejection, export/help/alias tests, source import checks, and a fresh-process built-package probe.

The following references identify the exact regression tests behind review-thread decisions, rather than claiming coverage from implementation alone:

Behavior Test source
Local-kind clock converted to UTC for both temp commands src/Tests/Unit/TempCandidateSafety.Tests.ps1: converts a local Get-Date result to a UTC retention cutoff; also asserts DateTimeKind.Utc, including on UTC-configured hosts.
Candidate disappears between discovery and removal src/Tests/Unit/TempCandidateSafety.Tests.ps1: reconciles a discovered candidate that disappears before deletion, parameterized for both temp commands.
No Exchange removal-bypass parameters src/Tests/Unit/PreviewCommandSafety.Tests.ps1: does not expose a removal-bypass parameter, using command metadata rather than a generic exception.
Optional registry absence versus access failure src/Tests/Unit/PreviewCommandSafety.Tests.ps1: IIS fixture uses an absent-value exception; reports registry access failure instead of silently omitting a configured root checks the error stream and -ErrorAction Stop.
IIS dependency registrations restored on success/failure, existing module preserved src/Tests/Unit/IISDiscoverySafety.Tests.ps1: four fresh-process fixture-module scenarios; also checks caller confirmation preferences and leaked commands. This does not claim to unload Windows assemblies.
Equivalent site/default/registry roots previewed once src/Tests/Unit/IISDiscoverySafety.Tests.ps1: site variants, registry dot/trailing/alternate-separator cases, and a distinct-custom-root control.
IIS FTP logging is discovered separately from web logging src/Tests/Unit/IISDiscoverySafety.Tests.ps1: fresh-process FTP scenario and in-process FTPSVC7 fixture verify the separate ftpServer.logFile root; the fresh-process scenario uses configured IIS format and an inetsv01.log candidate to verify format propagation. src/Tests/Unit/PreviewAllowlist.Tests.ps1 covers FTPSVC and legacy MSFTPSVC service labels and accepts the documented W3C monthly, daily, hourly, and size-rollover families plus bounded date sequences while rejecting the invented u_ft family.
Profile ancestors remain stable through queued size traversal src/Tests/Unit/ProfileOutput.Tests.ps1: holds profile ancestors while traversing queued directories attempts a queued-parent rename while a nested child is enumerated; every queued directory retains a stable/identity handle, and complete held ancestry is revalidated before and after path-based enumeration and before final sizing.
Skipped temp children remain protected during ancestor pruning src/Tests/Unit/CleanupBehavior.Tests.ps1: does not prune ancestors after a child becomes non-empty, parameterized for both temp commands, adds a recent child file after discovery, verifies the child handle blocks a concurrent rename, and keeps the directly touched ancestor.
A concurrently disappeared planned candidate disqualifies pruning src/Tests/Unit/CleanupBehavior.Tests.ps1: does not prune a directory when another process removes a planned candidate, parameterized for both temp commands, removes one planned sibling outside the cleaner after discovery, verifies the remaining candidate is removed, and keeps the now-empty parent and ancestors because not every planned child was removed by this invocation.
Malformed IIS roots fail through the result contract src/Tests/Unit/PreviewCommandSafety.Tests.ps1: returns a structured failure for a malformed root before probing protection verifies \\?\GLOBALROOT\Device\... returns IISDiscoveryFailed without invoking the protected-path probe.
Fully qualified Windows path syntax enforced before resolution src/Tests/Unit/FullyQualifiedPathSafety.Tests.ps1: drive-relative, root-relative, ordinary relative, provider, invalid RootPath, UNC, device, mixed-separator device, and extended-length syntax cases, plus valid drive/descendant and containment cases.
Shared result and stable error contracts src/Tests/Unit/ResultContract.Tests.ps1: documented cleanup fields, UTC normalization, stable fully qualified error ID, category, and target object.
Hard-link, symlink, and recreated-directory identity behavior src/Tests/Unit/IdentitySafety.Tests.ps1: native identity stability, hard-link fixture behavior for both temp commands when the host permits it, symbolic-link reparse detection, and recreated-directory identity mismatch. src/Tests/Unit/CoverageEdges.Tests.ps1 also verifies that ancestor handles remain held after discovery until mutation completes.
IIS/Exchange format and protected-path allowlists src/Tests/Unit/PreviewAllowlist.Tests.ps1: built-in IIS format names, Exchange Message Tracking/ETL/log patterns, protected IIS locations, and Exchange database/transaction path normalization.
Exchange protection metadata completeness src/Tests/Unit/PreviewAllowlist.Tests.ps1: complete database metadata remains Validated, while missing management metadata or a blank database/log path returns Unknown; malformed path objects still fail closed.
Typed stale-profile output src/Tests/Unit/ProfileOutput.Tests.ps1: typed fields, unknown dates, optional size, exclusions, queued-directory reparse replacement fail-closed behavior, native directory identity lock during enumeration, ancestor-handle/revalidation behavior through queued traversal, no host output, and orphan-helper retirement.
Fail-closed and runtime edge branches src/Tests/Unit/CoverageEdges.Tests.ps1, src/Tests/Unit/IISDiscoverySafety.Tests.ps1, src/Tests/Unit/PreviewCommandSafety.Tests.ps1, src/Tests/Unit/ProfileOutput.Tests.ps1, and src/Tests/Unit/RuntimeSafety.Tests.ps1: malformed and partial discovery with unknown totals, source-specific IIS errors, isolated WebAdministration dependency/preference state, stable temp directory handles during enumeration, queued-directory replacement, reparse roots/descendants, extended UNC normalization, canonical current-user temp containment, actual Windows-root resolution, actual token privilege, long-path policy, WhatIf state, explicit Confirm-false state, and fresh-process interactive Confirm approval/decline.
Review regressions closed in the final patch src/Tests/Unit/ExchangePreviewEdgeCases.Tests.ps1 and src/Tests/Unit/IISDiscoverySafety.Tests.ps1: extended-length namespaces remain on provider traversal paths while comparison/result paths are normalized, IIS FTP discovery uses the configuration provider with numeric site-id XPath selection (including apostrophe-named sites), discovery failures stay independent from valid web-root candidates and return per-FTP structured failures, unknown WebAdministration/registry logging formats and registry rollover modes fail closed, and the MkDocs deployment has a strict build followed by the supported gh-deploy --strict --force command. src/Tests/Unit/CoverageEdges.Tests.ps1 verifies root identity stability, recent/vanished-candidate pruning blockers, calendar-validated local-time, monthly, daily, and hourly W3C names, and IIS/NCSA prefix boundaries; src/Tests/Unit/RuntimeSafety.Tests.ps1 covers root-failure summaries, serialized native initialization, and one explicit Y plus one explicit N without nested prompts; profile sizing retains stable handles for every queued ancestor and revalidates the complete ancestry from those retained handles. src/Tests/Unit/PreviewCommandSafety.Tests.ps1 covers surfaced IIS metadata errors and W3SVC-only fallback metadata; src/Tests/Unit/PreviewAllowlist.Tests.ps1 covers Exchange command-probe errors.
Concurrent writer, profile identity, and unavailable-product safety src/Tests/Unit/CleanupBehavior.Tests.ps1: deletion without write sharing, candidate file and planned-directory verbose paths; src/Tests/Unit/TempCandidateSafety.Tests.ps1: opened-handle last-write metadata and file/directory replacement locks; src/Tests/Unit/ProfileOutput.Tests.ps1: complete service/application-pool SID exclusions, reparse-point ancestor rejection, queued-directory replacement fail-closed sizing, and native directory identity locking during enumeration; src/Tests/Unit/PreviewCommandSafety.Tests.ps1 and src/Tests/Unit/ExchangePreviewEdgeCases.Tests.ps1: unavailable IIS/Exchange products and roots report structured failed results.
Exact artifact and clean install src/Tests/Integration/PackageImport.Tests.ps1: archive sidecar/hash, manifest file records including hidden files, extracted source-layout import, external help, aliases, and preview locks in each available host. Exact merged PS7.4.20, PS7.5.11, and PS7.6.6 builds use explicit fixed text encodings and produce 19-file manifests; each runtime's sidecar hash matches its tested archive, and each archive is checked without rebuilding in its integration lane. The PS5.1 lane downloads the canonical 7.6.6 artifact and archive and repeats the package/import/clean-install checks without creating a separate archive. Archive and publisher checks use the same hidden-file-inclusive artifact set.
Full publication gate and module staging .github/workflows/Build Module.yml is callable by .github/workflows/Publish.yml; the publish job waits for the full matrix and downloads the tested PS7.6.6 artifact/archive. .github/workflows/publish.ps1 verifies the exact artifact, stages it beneath a temporary TheCleaners module directory, rechecks the staged manifest/file set and every staged-file SHA-256 against the archive manifest, and passes only that path to Publish-Module. Protected run 35268852573 exercised this path for 0.0.15-beta.
Host and ACL evidence lab/Invoke-TheCleanersAclFixture.ps1: isolated read-denied/delete-allowed ACL, exact rule masks, candidate before/after lists, result counts, bytes, errors, and acceptance. lab/Invoke-TheCleanersProductPreviewLab.ps1: read-only product, build, service, protected-path, candidate, and preview evidence with deletion disabled.

Adding tests or publishing a prerelease is not product acceptance. Exact 0.0.15-beta source, artifact, publication, and installed-package evidence is recorded above with runtime, hash, and scope boundaries. Windows/IIS/Exchange product acceptance is not replaced by CI with mocked fixtures or fresh package installation; Windows client/server, broader elevated/non-elevated, real-system-root, ReFS, IIS, Exchange, profile, and final 1.0 acceptance remain explicit open gates.

Parallel work boundaries

One integrator owns shared exports, loader, path helper, shared tests, and build/publishing files. IIS, Exchange, profile, and documentation work may proceed on separate branches with separate test files after interfaces are agreed. Merge serially, rebase, and rerun all cross-cutting tests. Do not run destructive acceptance tests concurrently against the same fixture or machine.

Out of scope for 1.0

Profile deletion, arbitrary-path or remote cleanup, scheduling installation, automatic all-service orchestration, Linux/macOS support, additional cleanup targets, and complex UI. These should not displace safety or packaging validation.