From 974fb97f10155416f96bc5276a75aa2554e3cc5c Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Sat, 6 Jun 2026 12:17:11 -0700 Subject: [PATCH] feat(bootstrap): set hostname in Phase 0 Rename the machine to the name in the bundle's identity.json (default GURU-5070, override with -Hostname) when run as admin, with an end-of-run reboot reminder. Ensures scheduled tasks, coord session IDs, and log attribution line up. RESTORE.md documents the step. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/bootstrap/RESTORE.md | 7 +++++++ .claude/bootstrap/windows-bootstrap.ps1 | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/.claude/bootstrap/RESTORE.md b/.claude/bootstrap/RESTORE.md index 891ddc0..d7cf50c 100644 --- a/.claude/bootstrap/RESTORE.md +++ b/.claude/bootstrap/RESTORE.md @@ -57,6 +57,11 @@ Copy-Item F:\claudetools-recovery\bootstrap\windows-bootstrap.ps1 $env:TEMP\boot F:\claudetools-recovery\bootstrap\windows-bootstrap.ps1 -SkipModels ``` +Run it from an **elevated** shell so Phase 0 can rename the machine to `GURU-5070` +(read from the bundle's identity.json; override with `-Hostname `). The rename +needs a **reboot** to take effect — the script reminds you at the end. Re-run after the +reboot to finish any phases that depend on the hostname. + `-SkipModels` defers the ~50 GB Ollama downloads. Drop it (or run Phase 8 later) when you want them. Add `-RestoreData` to also pull back the large client data from `F:\...\data`. @@ -67,6 +72,8 @@ just part of it: `-OnlyPhases "1,2,3"`. ## Manual path (if you'd rather do it by hand) +0. **Set the hostname** (elevated): `Rename-Computer -NewName GURU-5070 -Restart`. Do this + first so scheduled tasks / coord session IDs line up after the reboot. 1. **Install App Installer** (winget) from the Microsoft Store if missing. 2. **Core tools** (winget ids): `Git.Git`, `OpenJS.NodeJS.LTS`, `Python.Python.3.14`, `Rustlang.Rustup`, diff --git a/.claude/bootstrap/windows-bootstrap.ps1 b/.claude/bootstrap/windows-bootstrap.ps1 index a93619c..a67cf90 100644 --- a/.claude/bootstrap/windows-bootstrap.ps1 +++ b/.claude/bootstrap/windows-bootstrap.ps1 @@ -46,6 +46,7 @@ param( [string]$GiteaHost = 'https://git.azcomputerguru.com', [string]$ClaudeToolsRoot = 'D:\claudetools', [string]$VaultRoot = 'D:\vault', + [string]$Hostname, # target computer name; default = identity.json .machine, else GURU-5070 [string]$OnlyPhases ) $ErrorActionPreference = 'Stop' @@ -72,6 +73,21 @@ if (Phase 0 'Preflight') { Ok "winget present: $((Get-Command winget).Source)" $script:Bundle = Find-Bundle if ($script:Bundle) { Ok "recovery bundle: $script:Bundle" } else { Warn "no recovery bundle found - secret/identity restore phases will be skipped" } + + # Hostname - a fresh Windows install is DESKTOP-xxxxx; identity.json + scheduled tasks + # + coord session IDs all expect the real name. Rename needs admin and a reboot to apply. + $target = $Hostname + if (-not $target -and $script:Bundle -and (Test-Path "$script:Bundle\identity\identity.json")) { + try { $target = (Get-Content "$script:Bundle\identity\identity.json" -Raw | ConvertFrom-Json).machine } catch {} + } + if (-not $target) { $target = 'GURU-5070' } + if ($env:COMPUTERNAME -ne $target) { + $isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) + if ($isAdmin) { + try { Rename-Computer -NewName $target -Force -ErrorAction Stop; $script:RebootNeeded = $true; Ok "hostname: $env:COMPUTERNAME -> $target (takes effect after reboot)" } + catch { Warn "rename to '$target' failed: $($_.Exception.Message)" } + } else { Warn "hostname is '$env:COMPUTERNAME', target '$target' - run this script as Administrator to rename (or manually: Rename-Computer -NewName $target -Restart)" } + } else { Ok "hostname already '$target'" } } # ============================================================ PHASE 1 @@ -270,4 +286,8 @@ if (Phase 11 'Verify') { Write-Host " Verify vault: bash $ClaudeToolsRoot/.claude/scripts/vault.sh list" } +if ($script:RebootNeeded) { + Write-Host "`n[REBOOT] Hostname was changed to '$target' - REBOOT for it to take effect." -ForegroundColor Yellow + Write-Host " (scheduled tasks + coord session IDs read the hostname, so reboot before relying on them)" +} Write-Host "`n[DONE] windows-bootstrap.ps1 complete." -ForegroundColor Green