Prove clean .NET Eve package onboarding

This commit is contained in:
Meta Vens 2026-08-18 06:33:40 +02:00
commit d4d24385d1
6 changed files with 41 additions and 12 deletions

View file

@ -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
```

View file

@ -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"
}

View file

@ -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."

View file

@ -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

View file

@ -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

View file

@ -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