--- sessionId: session-260925-234832-1pc0 --- # Requirements ### Overview & Goals Rename all projects in the repository from single-word names (`Build`, `Deploy`, `Model`, `Web`) to qualified names starting with the `ZeroSpace.` prefix (`ZeroSpace.Build`, `ZeroSpace.Deploy`, `ZeroSpace.Model`, `ZeroSpace.Web`). Ensure all solution definitions, project files, folder paths, project references, namespaces, and script paths are updated consistently. ### Scope - **In Scope:** - Renaming project directories: `ZS/Build` → `ZS/ZeroSpace.Build`, `ZS/Deploy` → `ZS/ZeroSpace.Deploy`, `ZS/Model` → `ZS/ZeroSpace.Model`, `ZS/Web` → `ZS/ZeroSpace.Web`. - Renaming `.csproj` files: `Build.csproj` → `ZeroSpace.Build.csproj`, `Deploy.csproj` → `ZeroSpace.Deploy.csproj`, `Model.csproj` → `ZeroSpace.Model.csproj`, `Web.csproj` → `ZeroSpace.Web.csproj`. - Updating `ZS/ZeroSpace.sln` project declarations and configuration mappings. - Updating `` in `ZeroSpace.Web.csproj`. - Updating C# namespaces and `@using` directives to match the `ZeroSpace.*` convention. - Updating hardcoded project/folder paths in `ZeroSpace.Build/Program.cs` and `ZeroSpace.Deploy/Program.cs`. - **Out of Scope:** - Modifying business logic or UI behavior in the Blazor web application. - Renaming Markdown documentation files under `zs.docs`. # Technical Design ### Current Implementation The solution contains 4 projects in `ZS/`: - `ZS/Model/Model.csproj`: Class library declaring `namespace Model;`. - `ZS/Build/Build.csproj`: Console generator referencing `Model/Units.g.cs` and scanning for `ZS.sln`. - `ZS/Deploy/Deploy.csproj`: Deployment tool targeting `../Web/Web.csproj`. - `ZS/Web/Web.csproj`: Blazor WebAssembly app referencing `..\Model\Model.csproj` and using `Web`, `Web.Layout`, and `Model`. - `ZS/ZeroSpace.sln`: Solution listing `Web`, `Build`, `Model`, and `Deploy`. ### Key Decisions - **Rename Project Directories:** Project folder names will be updated to match the project names (`ZeroSpace.Build`, `ZeroSpace.Deploy`, `ZeroSpace.Model`, `ZeroSpace.Web`) to maintain standard .NET convention where directory name matches the assembly/project name. - **Update Namespaces:** Align namespaces (`ZeroSpace.Model`, `ZeroSpace.Web`) with project naming for consistency across the solution. - **Fix Solution Search in Build Tool:** Update `FindSolutionRoot` in `ZeroSpace.Build/Program.cs` to locate `ZeroSpace.sln` (or any `*.sln`). ### Proposed Changes - **Project Structure & Naming:** - `ZS/Build/` → `ZS/ZeroSpace.Build/` - `ZS/Build/Build.csproj` → `ZS/ZeroSpace.Build/ZeroSpace.Build.csproj` - `ZS/Deploy/` → `ZS/ZeroSpace.Deploy/` - `ZS/Deploy/Deploy.csproj` → `ZS/ZeroSpace.Deploy/ZeroSpace.Deploy.csproj` - `ZS/Model/` → `ZS/ZeroSpace.Model/` - `ZS/Model/Model.csproj` → `ZS/ZeroSpace.Model/ZeroSpace.Model.csproj` - `ZS/Web/` → `ZS/ZeroSpace.Web/` - `ZS/Web/Web.csproj` → `ZS/ZeroSpace.Web/ZeroSpace.Web.csproj` - **Solution File (`ZS/ZeroSpace.sln`):** - Update project name strings and project file paths to `ZeroSpace.*`. - **Project Reference (`ZS/ZeroSpace.Web/ZeroSpace.Web.csproj`):** - Change `..\Model\Model.csproj` to `..\ZeroSpace.Model\ZeroSpace.Model.csproj`. - **Source Files & Namespaces:** - `ZS/ZeroSpace.Model/UnitData.cs`: `namespace ZeroSpace.Model;` - `ZS/ZeroSpace.Model/UnitEfficiency.cs`: `namespace ZeroSpace.Model;` - `ZS/ZeroSpace.Model/Units.g.cs`: `namespace ZeroSpace.Model;` - `ZS/ZeroSpace.Build/Program.cs`: update model path to `ZeroSpace.Model`, generate `namespace ZeroSpace.Model;`, check `ZeroSpace.sln`. - `ZS/ZeroSpace.Deploy/Program.cs`: update path lookups for `ZeroSpace.Web` and `ZeroSpace.Web.csproj`. - `ZS/ZeroSpace.Web/Program.cs`: `using ZeroSpace.Web;` - `ZS/ZeroSpace.Web/_Imports.razor`: `@using ZeroSpace.Web`, `@using ZeroSpace.Web.Layout`, `@using ZeroSpace.Model` - `ZS/ZeroSpace.Web/Pages/Units.razor`: `@using ZeroSpace.Model` ### Architecture Diagram ```mermaid graph TD Sln[ZS/ZeroSpace.sln] --> Web[ZS/ZeroSpace.Web] Sln --> Model[ZS/ZeroSpace.Model] Sln --> Build[ZS/ZeroSpace.Build] Sln --> Deploy[ZS/ZeroSpace.Deploy] Web --> Model Build -. generates Units.g.cs .-> Model Deploy -. publishes .-> Web ``` # Testing ### Validation Approach - Verify solution builds cleanly via CLI (`dotnet build ZS/ZeroSpace.sln`). - Run code generation via `dotnet run --project ZS/ZeroSpace.Build/ZeroSpace.Build.csproj` to confirm `Units.g.cs` is generated with the proper namespace. - Validate project references and dependencies resolve without warnings or missing assembly errors. ### Key Scenarios - `dotnet build ZS/ZeroSpace.sln` succeeds with 0 errors and 0 warnings. - `ZeroSpace.Web` compiles with reference to `ZeroSpace.Model`. - `ZeroSpace.Build` locates `zs.docs` and writes generated code into `ZS/ZeroSpace.Model/Units.g.cs`. ### Edge Cases - Relative path traversal from build outputs (`AppContext.BaseDirectory` in `ZeroSpace.Deploy`) resolving the renamed `ZeroSpace.Web` project directory. - `FindSolutionRoot` helper locating `ZeroSpace.sln` accurately. # Delivery Steps ### ✓ Step 1: Rename project directories and project files Project folders and `.csproj` files follow the `ZeroSpace.*` naming convention. - Rename directory `ZS/Model` to `ZS/ZeroSpace.Model` and project file `Model.csproj` to `ZeroSpace.Model.csproj`. - Rename directory `ZS/Build` to `ZS/ZeroSpace.Build` and project file `Build.csproj` to `ZeroSpace.Build.csproj`. - Rename directory `ZS/Deploy` to `ZS/ZeroSpace.Deploy` and project file `Deploy.csproj` to `ZeroSpace.Deploy.csproj`. - Rename directory `ZS/Web` to `ZS/ZeroSpace.Web` and project file `Web.csproj` to `ZeroSpace.Web.csproj`. ### ✓ Step 2: Update solution file and project references `ZeroSpace.sln` and project reference paths correctly reference the renamed projects and directories. - Update `ZS/ZeroSpace.sln` project entries and relative paths for `ZeroSpace.Web`, `ZeroSpace.Build`, `ZeroSpace.Model`, and `ZeroSpace.Deploy`. - Update project reference `` in `ZS/ZeroSpace.Web/ZeroSpace.Web.csproj`. ### ✓ Step 3: Update namespaces and code path references Source code files, generator scripts, and deployment scripts use the updated `ZeroSpace.*` namespaces and folder paths. - Update C# namespaces in `ZS/ZeroSpace.Model/UnitData.cs`, `ZS/ZeroSpace.Model/UnitEfficiency.cs`, and `ZS/ZeroSpace.Model/Units.g.cs` to `ZeroSpace.Model`. - Update code generator in `ZS/ZeroSpace.Build/Program.cs` to target `ZeroSpace.Model` folder, output `namespace ZeroSpace.Model;`, and verify solution root resolution for `ZeroSpace.sln`. - Update deploy script paths in `ZS/ZeroSpace.Deploy/Program.cs` to locate `ZeroSpace.Web` and `ZeroSpace.Web.csproj`. - Update `ZS/ZeroSpace.Web/Program.cs`, `ZS/ZeroSpace.Web/_Imports.razor`, and `ZS/ZeroSpace.Web/Pages/Units.razor` to reference `ZeroSpace.Web`, `ZeroSpace.Web.Layout`, and `ZeroSpace.Model`. ### ✓ Step 4: Validate solution build and code generation The entire solution builds cleanly with zero errors/warnings and code generation runs successfully. - Run `dotnet build ZS/ZeroSpace.sln` to ensure all projects compile and link without errors. - Run `ZeroSpace.Build` console application to ensure unit code generation completes and updates `ZeroSpace.Model/Units.g.cs` correctly.