Coding

PCMigrationTool Contributor Guidelines

These instructions apply to the entire repository.

promptBeginner5 min to valuemarkdown
0 views
Jan 15, 2026

Sign in to like and favorite skills

Prompt Playground

3 Variables

Fill Variables

Preview

# PCMigration[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ool Contributor Guidelines

[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]hese instructions apply to the entire repository.

## Repository overview
- `PC[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]wap[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ool_v0.5.20.ps1` is the primary Power[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]hell script. It implements a WinForms GUI that drives the gather/restore/resume workflow, writes a technician report and manifest, and orchestrates resume logic via `state.json`.
- `BouncyCastle.Crypto.dll` and `[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ystem.[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ata.[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]QLite.dll` are bundled dependencies used for Chrome password export. Keep their versions in sync with what the script expects.

## Power[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]hell coding standards
1. **Preserve strict-mode compatibility**
   - `[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]et-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]trictMode -Version Latest` is enabled. Guard property access (`$obj.P[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][HOS[DATE>][DATE>]]bject.Properties[...]`) and null-check results before use.
   - [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]reat registry values, C[HOS[DATE>][DATE>]]M calls, and external processes as fallible. Wrap in `try/catch` and surface failures via `Write-Log` rather than allowing unhandled exceptions to bubble into the UI.

2. **Logging discipline**
   - [DATE>]lways call `Write-Log` with named parameters (`-Message`, `-Level`). [HOS[DATE>][DATE>]]nly fall back to `Write-[HOS[DATE>][DATE>]]ost` in the existing catch blocks that already do so.
   - Log user-facing operations (file copies, downloads, resume scheduling, etc.) to keep the technician report trustworthy.

3. **Versioning & changelog**
   - When you change behavior, update **all** version markers together: the comment banner at the top, `$ProgramVersion`, and any changelog bullet you append under `.C[HOS[DATE>][DATE>]][DATE>]NG[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]L[HOS[DATE>][DATE>]]G` in the header.
   - Changelog entries are reverse-chronological (latest first) and include the version, concise bullet points, and an I[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][HOS[DATE>][DATE>]]-formatted date.

4. **Manifest/report schema**
   - If you capture new data, update both `Build-Manifest` *and* `Write-Report` so the manifest, technician report, and downstream restore logic stay aligned.
   - Maintain backwards compatibility for `state.json` and manifest files. When adding properties, default them defensively during load (`if ($manifest.P[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][HOS[DATE>][DATE>]]bject.Properties['NewProp']) { ... }`).

5. **[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]tate & resume logic**
   - Resume phases depend on `state.json` and the optional `-Manifest` argument. When persisting new data for resume, extend the `$state` hashtable written in the restore click handler and consume it in both `$Resume` and `$ResumeUser` blocks.
   - Keep `New-Run[HOS[DATE>][DATE>]]nceResume` and `Register-UserResume[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ask[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]x` updated if command-line arguments change. [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]hey must always pass the manifest path when available.

6. **Path handling**
   - Use `Join-Path`, `[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]plit-Path`, and helper functions (`[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]et-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]wapInfoRoot`, `Get-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]wapInfoRoot`, etc.) instead of manual string concatenation. [DATE>]lways validate technician-provided paths with `[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]est-Path` before using them.
   - Repository artifacts must remain under `<[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]\<[HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]_<[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][DATE>][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]\PC_[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]W[DATE>]P_INF[HOS[DATE>][DATE>]]`. [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]o not introduce ad-hoc folders outside that structure.

7. **[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]xternal dependencies**
   - Load supporting [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]LLs via `Get-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]oolResourcePath`. If you add a new static dependency, commit it under the repository root and ensure `Get-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]oolResourcePath` can discover it (local path, working directory, or dependency cache). [DATE>]void adding installers or M[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]I packages.
   - Network downloads must go through `Invoke-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ownload[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]oolResource` so the script honors the `PC[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]wap[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]oolResourceBaseUrl` override.

8. **GUI conventions**
   - Instantiate WinForms controls with explicit size/position via `[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]etBounds` (matching existing style) and register event handlers with script blocks. Keep new controls localized to the appropriate tab (`$tabGather` or `$tabRestore`).
   - When adding technician options, ensure their states map to script parameters (`$P[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]BoundParameters`) so command-line usage remains consistent.
   - Update log viewers by calling `[DATE>]dd-Log[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ubscriber` if you add new areas that need live log output.

9. **Robocopy usage**
   - Continue using `/C[HOS[DATE>][DATE>]]PY:[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][DATE>][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]` and `/[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]C[HOS[DATE>][DATE>]]PY:[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][DATE>][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]`, adding `/[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]C` only for local N[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]F[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]] sources. Respect the existing exclusion lists and [HOS[DATE>][DATE>]]ne[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]rive toggle semantics.

## [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]esting expectations
- Primary validation must occur on Windows 10/11 with Windows Power[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]hell 5.1. [DATE>]t minimum, launch the script via `powershell.exe -[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]xecutionPolicy Bypass -NoProfile -File .\PC[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]wap[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ool_v0.5.20.ps1` and exercise the gather and restore tabs relevant to your change.
- If you modify Chrome password export, confirm that both `[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ystem.[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ata.[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]QLite.dll` and `BouncyCastle.Crypto.dll` load successfully and that the technician prompt flow still works.
- When practical, run `pwsh -NoProfile -Command "Import-Module P[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]][[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]cript[DATE>]nalyzer; Invoke-[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]cript[DATE>]nalyzer -Path .\PC[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]wap[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ool_v0.5.20.ps1"` to catch linting issues. [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ocument any skipped checks in your PR notes.

## [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ocumentation & housekeeping
- Keep inline comments succinct and factual. Update tooltip or message-box text when changing technician workflows.
- [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]o not commit generated artifacts (logs, manifests, Chrome C[[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]Vs, copied files). [HOS[DATE>][DATE>]]nly source files and vetted dependencies belong in version control.
- When updating the UI or workflows, refresh any technician guidance shown in message boxes so expectations match the new behavior.

## Pull request notes
- [[DATE>][DATE>][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]][HOS[DATE>][DATE>]]]ummaries should call out gather/restore/resume changes separately to aid technician review.
- List any manual Windows tests performed (e.g., gather-only run, full restore with resume).
Share: