Novolis Docs
novolis-governance / completed-plans/ship_platform_to_main_80c1dd58.plan.md

Ship platform: meta-solution, verify, push main, org landing

dotnetgovernancenovolis

name: Ship platform to main overview: Regenerate Novolis.Platform.slnx, locally build/test/coverage on the dirty package repos, commit and push libraries then consumers to main for GPR publish, then refresh the org landing README in .github. todos:

  • id: regen-slnx

content: Run Generate-Platform-Slnx.ps1; commit map/slnx in governance status: completed

  • id: build-platform

content: dotnet build Novolis.Platform.slnx + verify-nuget-only / project-ref-mode status: completed

  • id: coverage

content: get-coverage-report -Exclude novolis-raylib -FailBelow 60; fix non-Windows failures status: completed

  • id: push-libs

content: Commit+push library repos to main; wait for GPR publish CI status: completed

  • id: push-consumers

content: Commit+push apps/dogfooding; package-only restore smoke status: completed

  • id: org-landing

content: Update-OrgLandingStatus.ps1; commit+push .github profile/README.md status: completed isProject: false


Dirty work sits on main in ~12 repos (library extractions + third-party hole remediation). Goal: regen meta-solution, green local verify, push so CI publishes packages, refresh org landing.

Constraint: NuGet-only — no local feeds. Push library repos first, wait for merge/publish CI, then consumers. Explicit user request to push to main.

flowchart TD
  regen[Generate-Platform-Slnx]
  build[Build Novolis.Platform.slnx]
  test[Coverage + tests non-Windows-heavy]
  commitLibs[Commit and push lib repos]
  waitCI[Wait GPR publish CI]
  commitApps[Commit and push apps dogfooding]
  landing[Update-OrgLandingStatus and push .github]
  regen --> build --> test --> commitLibs --> waitCI --> commitApps --> landing

1. Regenerate meta-solution

pwsh -File novolis-governance/build/Generate-Platform-Slnx.ps1

Includes new/moved packages (Simulation.Mesh, Avalonia.Live, Modeling.Scene under cad, Agent.Surface under commands, etc.). Commit map + Novolis.Platform.slnx changes in novolis-governance.


2. Local build (ProjectRef mode)

dotnet build novolis-governance/build/Novolis.Platform.slnx

Auto-enables ProjectReference substitution. Fix any breakages from concurrent dirty trees before proceeding.

Also:

pwsh -File novolis-governance/scripts/verify-nuget-only.ps1
pwsh -File novolis-governance/scripts/verify-project-ref-mode.ps1 -SkipBuild

3. Tests and coverage

Use standing excludes from coverage-excludes.txt (already skips apps, dogfooding, templates, workflows, …).

Extra exclude for Windows-heavy hosts on this Linux-capable pass if needed: -Exclude novolis-raylib (user: skip Windows-only). Raylib often fails or is slow off Windows.

pwsh -File novolis-governance/scripts/get-coverage-report.ps1 -Exclude novolis-raylib -FailBelow 60 -ThrottleLimit 6

Acceptable = exit 0 and aggregate line coverage ≥ 60% (org gate from coverage-report.md). Investigate/fix failing non-excluded repos; do not fail the ship on excluded Windows-only suites.

Touched lib repos to prioritize if full parallel is too heavy: simulation, gaming, economy, cad, commands, avalonia, audio, rendering, transports.


4. Commit and push — libraries first

Per-repo commit on current main (no new branches unless branch protection blocks direct push — then PR + merge). Repos with dirty work:

RepoWhy
novolis-simulationMesh, cameras, Racing Vector3
novolis-gamingSession 1.1 genericize
novolis-economyCreditCirculation only (Astro bridge stays out)
novolis-cadModeling.Scene move, OpeningDerivation
novolis-commandsAgent.Surface move
novolis-avaloniaAvalonia.Live, 3D Silk ownership, package moves out
novolis-audioLive.Render consumption path if any
novolis-renderingTwoDViewport, Silk presentation abstractions
novolis-transportsWireFish PacketPresentation
novolis-governancePlatform map/slnx + docs

For each: git status / diff / log style commit messages; git push origin main. Do not amend published commits; do not force-push.

After lib pushes: watch merge/publish workflows (gh run list / wait) until GPR has new 2026.1.* for Mesh, Game.Session, Avalonia.Live, WireFish, etc.


5. Commit and push — consumers

RepoWhy
novolis-appsSins Mesh PackageRef, Session adapters, LiveStudio Host, props cleanup
novolis-dogfoodingCalypsoCad, WireFishViewer, Silk-free labs, props cleanup

Restore/build a consumer without ProjectRef after GPR is warm:

dotnet restore novolis-apps/src/SinsOfACapitalismTycoon/SinsOfACapitalismTycoon.csproj
dotnet build ...

6. Org landing regen

From .github (skill: novolis-org-landing):

pwsh -File scripts/Update-OrgLandingStatus.ps1
git add profile/README.md
git commit -m "Refresh org landing CI and package version matrices."
git push origin main

Requires gh auth to Novolis-Platform. Do not hand-edit the generated marker block.


Done criteria

  1. Generate-Platform-Slnx.ps1 succeeded; Platform.slnx builds
  2. verify-nuget-only + verify-project-ref-mode -SkipBuild exit 0
  3. Coverage report exit 0 with aggregate ≥ 60% (raylib excluded)
  4. All dirty repos committed and on origin/main
  5. Consumer restore works from nuget.org + GitHub Packages only
  6. Org landing profile/README.md regenerated and pushed