diff --git a/docs/nuget-packaging.md b/docs/nuget-packaging.md index a269090a..afc94570 100644 --- a/docs/nuget-packaging.md +++ b/docs/nuget-packaging.md @@ -19,5 +19,5 @@ closure through UPM rather than NuGet restore. Install the Unity package from the immutable release tag: ```text -https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.8 +https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.46 ``` diff --git a/scripts/pack-nuget.ps1 b/scripts/pack-nuget.ps1 index b027c492..14fa7340 100644 --- a/scripts/pack-nuget.ps1 +++ b/scripts/pack-nuget.ps1 @@ -27,7 +27,8 @@ if (Test-Path -LiteralPath $outputRoot) { New-Item -ItemType Directory -Force -Path $outputRoot | Out-Null foreach ($project in $projects) { - dotnet pack (Join-Path $repoRoot $project) -c $Configuration -o $outputRoot + dotnet pack (Join-Path $repoRoot $project) -c $Configuration -o $outputRoot ` + --nologo --verbosity quiet -p:NoWarn=1591%3BCS8632 if ($LASTEXITCODE -ne 0) { throw "NuGet pack failed for $project with exit code $LASTEXITCODE" } @@ -82,7 +83,8 @@ Console.WriteLine(verse.Context.VerseId); "@ [IO.File]::WriteAllText((Join-Path $smokeRoot "Consumer.csproj"), $projectDocument, [Text.UTF8Encoding]::new($false)) [IO.File]::WriteAllText((Join-Path $smokeRoot "Program.cs"), $program, [Text.UTF8Encoding]::new($false)) - dotnet run --project (Join-Path $smokeRoot "Consumer.csproj") -c Release + dotnet run --project (Join-Path $smokeRoot "Consumer.csproj") -c Release ` + --nologo --verbosity quiet if ($LASTEXITCODE -ne 0) { throw "GameCult.Mesh NuGet consumer smoke failed with exit code $LASTEXITCODE" } diff --git a/scripts/verify-eve-getting-started.ps1 b/scripts/verify-eve-getting-started.ps1 index be49aafe..1805b070 100644 --- a/scripts/verify-eve-getting-started.ps1 +++ b/scripts/verify-eve-getting-started.ps1 @@ -18,6 +18,21 @@ foreach ($requiredPrimitive in @("CultNetOperationServer", "EveSurface.Create")) } } +$dotnetPackageRoot = Join-Path ([IO.Path]::GetTempPath()) ` + ("eve-getting-started-nuget-" + [guid]::NewGuid().ToString("N")) +try { + & (Join-Path $EveRoot "scripts\pack-dotnet-surface.ps1") ` + -CultLibRoot $cultLibRoot ` + -OutputDirectory $dotnetPackageRoot + if ($LASTEXITCODE -ne 0) { + throw "The clean .NET package-consumer checkpoint failed." + } +} finally { + if (Test-Path -LiteralPath $dotnetPackageRoot) { + Remove-Item -LiteralPath $dotnetPackageRoot -Recurse -Force + } +} + & (Join-Path $PSScriptRoot "verify-eve-two-runtime-sample.ps1") ` -EveRoot $EveRoot ` -SkipDependencyInstall:$SkipDependencyInstall @@ -37,4 +52,4 @@ if ($LASTEXITCODE -ne 0) { throw "The real browser/C# network checkpoint failed." } -Write-Host "Eve getting-started verification passed: clean artifacts, DOM and headless convergence, real Chromium and C# clients, Odin discovery, receipts, persistence, and route replacement." +Write-Host "Eve getting-started verification passed: clean .NET and TypeScript artifacts, DOM and headless convergence, real Chromium and C# clients, Odin discovery, receipts, persistence, and route replacement." diff --git a/src/GameCult.Mesh/docs/getting-started/03-publish-an-eve-surface.md b/src/GameCult.Mesh/docs/getting-started/03-publish-an-eve-surface.md index a910cf97..4d5af0dc 100644 --- a/src/GameCult.Mesh/docs/getting-started/03-publish-an-eve-surface.md +++ b/src/GameCult.Mesh/docs/getting-started/03-publish-an-eve-surface.md @@ -94,9 +94,16 @@ cd CultLib pwsh -File ./scripts/verify-eve-getting-started.ps1 ``` -This one command runs the clean package-artifact checkpoint and then the real -browser/C# network checkpoint. They remain separate programs because they prove -different boundaries; the developer should not have to orchestrate them. +This one command runs clean .NET and TypeScript package-artifact checkpoints, +then the real browser/C# network checkpoint. They remain separate programs +because they prove different boundaries; the developer should not have to +orchestrate them. + +The .NET layer packs CultLib's managed dependency graph and +`GameCult.Eve.Surface`, then restores and runs an empty project whose only +GameCult dependency is `PackageReference Include="GameCult.Eve.Surface"`. +This proves the renderer-neutral provider contract does not require a sibling +Eve or CultLib source tree after packaging. The first layer builds and packs `cultcache-ts`, `cultnet-ts`, `cultmesh-ts`, `@gamecult/eve-contracts`, and `@gamecult/eve-browser-lowering`, installs the diff --git a/src/GameCult.Mesh/docs/getting-started/04-run-the-multiruntime-game.md b/src/GameCult.Mesh/docs/getting-started/04-run-the-multiruntime-game.md index cb921ea1..a748368b 100644 --- a/src/GameCult.Mesh/docs/getting-started/04-run-the-multiruntime-game.md +++ b/src/GameCult.Mesh/docs/getting-started/04-run-the-multiruntime-game.md @@ -21,17 +21,20 @@ The command owns setup and teardown. Do not start Odin, the provider, or the browser by hand. A successful run prints two JSON records followed by: ```text -Eve getting-started verification passed: clean artifacts, DOM and headless convergence, real Chromium and C# clients, Odin discovery, receipts, persistence, and route replacement. +Eve getting-started verification passed: clean .NET and TypeScript artifacts, DOM and headless convergence, real Chromium and C# clients, Odin discovery, receipts, persistence, and route replacement. ``` ## What The Command Proves -The first checkpoint packs the TypeScript CultCache, CultNet, CultMesh, and Eve +The first checkpoint packs the CultLib managed dependency closure and Eve's C# +surface contract, then restores and runs an empty .NET project using only the +resulting `GameCult.Eve.Surface` package. The second checkpoint packs the +TypeScript CultCache, CultNet, CultMesh, and Eve packages, installs those artifacts into an empty temporary consumer, and proves DOM/headless convergence plus `.cc` reopen. This rejects a sample that only works through repository-relative source imports. -The second checkpoint boots separate Odin, provider, Chromium, and C# headless +The third checkpoint boots separate Odin, provider, Chromium, and C# headless processes. Chromium performs the first increment. The provider then restarts on a different route, Odin advertises the replacement, and the retained clients resubscribe without application reconnect code. C# performs the second diff --git a/src/GameCult.Mesh/docs/getting-started/README.md b/src/GameCult.Mesh/docs/getting-started/README.md index d09d10e2..b32052a7 100644 --- a/src/GameCult.Mesh/docs/getting-started/README.md +++ b/src/GameCult.Mesh/docs/getting-started/README.md @@ -11,8 +11,10 @@ pwsh -File ./scripts/verify-eve-getting-started.ps1 ``` With clean sibling CultLib and Eve checkouts, the command installs missing build -dependencies and runs two explicit evidence layers. First it packs the five -TypeScript packages into an empty temporary consumer, validates the Eve surface +dependencies and runs three explicit evidence layers. First it packs the +CultLib managed dependency closure plus `GameCult.Eve.Surface`, then restores +and runs an empty .NET consumer using only `PackageReference`. Next it packs the five +TypeScript packages into another empty temporary consumer, validates the Eve surface and receipt, executes one idempotent counter command, proves a DOM lowerer and headless observer converge, and reopens the durable `.cc` store. Then it boots a durable C# provider, local Odin fixture, real Chromium lowerer, and independent