using System.IO; using ClaudeDo.Installer.Core; namespace ClaudeDo.Installer.Steps; public sealed class WriteInstallManifestStep : IInstallStep { public string Name => "Write Install Manifest"; public Task ExecuteAsync(InstallContext ctx, IProgress progress, CancellationToken ct) { if (string.IsNullOrWhiteSpace(ctx.InstalledVersion)) return Task.FromResult(StepResult.Fail("Installed version is not set — DownloadAndExtractStep must run first.")); try { var manifest = new InstallManifest( Version: ctx.InstalledVersion, InstallDir: ctx.InstallDirectory, WorkerDir: Path.Combine(ctx.InstallDirectory, "worker"), InstalledAt: DateTimeOffset.UtcNow); InstallManifestStore.Write(ctx.InstallDirectory, manifest); progress.Report($"Wrote {InstallManifestStore.ManifestPath(ctx.InstallDirectory)}"); return Task.FromResult(StepResult.Ok()); } catch (Exception ex) { return Task.FromResult(StepResult.Fail(ex.Message)); } } }