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

Platform import master plan

dotnetgovernancenovolis

name: Platform import master plan overview: "Consolidate all novolis-governance/docs/imports-todo/ briefs into one phased, dependency-ordered platform import plan: finish in-repo gaps, migrate Frank sources from D:\\frankrepos/D:\\github, adopt product patterns (SCR, FleetCommander), and treat third-party trees as inspiration-only—without vendoring." todos:

  • id: write-master-plan-doc

content: Create novolis-governance/docs/platform-import-plan.md with phased tables, status, mermaid DAG, and skip list status: completed

  • id: wire-governance-indexes

content: Update imports-todo/README.md, roadmap.md, and frank-inventory.md to link master plan; mark appendices as detail-only status: completed

  • id: phase0-math-gpr

content: "Execute Phase 0: Math BCL GPR publish, Physics.Numerics sunset, internal rendering/math polish, verify-nuget-only" status: completed

  • id: phase1-mapping-raylib

content: "Execute Phase 1: novolis-mapping repo + Novolis.Raylib.Loaders + Novolis.Raylib.Input" status: completed

  • id: phase2-infra

content: "Execute Phase 2: novolis-scheduling, messaging facade, audio package, ViewPose bridge in dogfooding" status: completed

  • id: phase3-products

content: "Execute Phase 3: SCR + FleetCommander adopt Novolis.Simulation.Replay; optional event-store interface spike" status: completed

  • id: phase4-p2

content: "Execute Phase 4: workflows, EF data facet, codegen devtools, ML remainder audit" status: completed

  • id: phase5-acs-ci

content: "Execute Phase 5: ACS governance alignment + central Workflows CI" status: completed

  • id: revise-stale-appendices

content: Update gameengine-2d and bedrock/fleetcommander appendices to reflect TwoD.Silk and shipped Tcp/Replay status status: completed isProject: false


Problem

Today import work lives as 37 disconnected markdown files under `novolis-governance/docs/imports-todo/`, plus overlap with `roadmap.md` and `frank-inventory.md`. There is no single execution sequence, status tracking, or publish gate.

Deliverable (governance change)

Create one canonical plan and demote scattered docs to appendices:

ArtifactRole
[`docs/platform-import-plan.md`](d:\novolis\novolis-governance\docs\platform-import-plan.md) (new)Master plan: phases, dependencies, acceptance, status
`docs/imports-todo/README.md`Short index pointing to master plan + “detail appendix” links
`docs/roadmap.md`Add “Platform imports” section linking to master plan
Detail files under imports-todo/Kept as appendices (what/why/how); no duplicate priority tables
flowchart TB
  subgraph phase0 [Phase0_Gates]
    GPR[NuGet_GPR_publish]
    MathBCL[Math_BCL_GPR_wave]
    NuGetOnly[verify_nuget_only]
    DocsAlign[governance_doc_alignment]
  end
  subgraph phase1 [Phase1_Frank_P0]
    Mapping[novolis_mapping]
    Assets[raylib_loaders_OBJ]
    Input[raylib_input]
  end
  subgraph phase2 [Phase2_Frank_P1]
    Cron[novolis_scheduling]
    Msg[novolis_messaging_facade]
    Audio[novolis_audio_or_raylib]
    StackFinish[math_rendering_physics_finish]
  end
  subgraph phase3 [Phase3_Products]
    ReplayDone[Novolis.Simulation.Replay]
    SCR[SCR_event_journal_adapter]
    FC[FleetCommander_timeline_dogfood]
  end
  subgraph phase4 [Phase4_Frank_P2]
    Workflow[novolis_workflows]
    EF[novolis_data_EF]
    CodegenDev[codegen_devtools]
    ML[ML_remainder_audit]
  end
  subgraph phase5 [Phase5_Ops]
    ACS[ACS_governance]
    CI[Workflows_CI]
  end
  phase0 --> phase1
  phase1 --> phase2
  Mapping --> Workflow
  Cron --> Workflow
  Msg --> Workflow
  MathBCL --> StackFinish
  ReplayDone --> SCR
  ReplayDone --> FC
  phase2 --> phase3
  phase2 --> phase4
  phase0 --> phase5

Global rules (all phases)

From `third-party-inspiration-policy.md` and workspace policy:

  • Mine (Frank): D:\frankrepos, D:\github\Frank.*, FleetCommander, SCR — extract pieces via rebuild, not wholesale copy.
  • Third-party: D:\repos clones (bullet3, raylib, ravendb, …) and D:\dotnetrepos (Bedrock, aspnetcore, …) — inspiration only; use NuGet or reimplement slices.
  • Cross-repo: PackageReference only (`nuget-only-policy.md`); publish upstream packages before consumer bumps.
  • Stack: `library-boundaries.md` — Math → Physics → Simulation; Raylib/Rendering orthogonal; SCR product code stays in StarConflictsRevolt.*.

Already done (do not re-plan; close in master plan)

ItemEvidenceAppendix
Simulation replay (FC patterns)`Novolis.Simulation.Replay` in slnxfleetcommander-patterns
TCP middleware + memory transport`Novolis.Transports.Tcp.Abstractions`bedrockframework-transports
2D platformer lane (partial GameEngine 2D)`Novolis.Rendering.TwoD` + `Backends.TwoD.Silk` per design-two-d.mdgameengine-2d — revise appendix: Raylib Scene2D import → cancelled unless gap found; optional: Board<T> only

Follow-ups on “done” items (still in plan): GPR publish for Replay + Tcp.Abstractions; optional logging middleware; SCR/FC adoption of Replay package.


Phase 0 — Publish gates and in-repo completion (2–3 weeks)

Unblocks all consumers; sourced from `internal-novolis-audit/`.

WorkstreamActionsAcceptance
GPR / local feedShip messaging pilot per nuget-setup.md; pack Math 2026.1.* (Arrays, Topology, Geometry), Simulation.Replay, Tcp.AbstractionsConsumers restore without Ray3/Sphere3 missing types
Math BCL wavemath-bcl-refactor-publish-wave: consumer Directory.Packages.props, release notes, verify-nuget-only.ps1 exit 0Physics/Rendering/Simulation/dogfooding build on packages only
Physics.Numerics sunsetphysics-numerics-package-sunset: fix README, remove csproj edges, delete packageNo production Ray3d guidance
Rendering/math polishviewbasis, ilgpu-bvh-slab-parity, rigidtransformTests green; single slab/ray authority
Doc alignmentgovernance-docs-stale-references, simulation-layer-policy Topology line, cursor rule Ray3Agents see consistent names

Phase 1 — Frank P0: new platform packages (3–5 weeks)

Sources: D:\frankrepos (primary). Appendices: frank-mapping, gameengine-assets, gameengine-input.

#TargetSourceNotes
1.1`novolis-mapping` (Novolis.Mapping, .Analyzers; Documents wave 1b)Frank.MappingBlocks WorkflowEngine and ML Legacy; update frank-inventory wave 13
1.2`Novolis.Raylib.Loaders` (or .Assets)Frank.GameEngine.Assets (ObjParser, SceneMeshImporter, optional Assimp split)Merge with wave 7b OBJ brief; depends Phase 0 Geometry GPR
1.3`Novolis.Raylib.Input`Frank.GameEngine.InputIInputSource, NullInputSource; no Simulation ref

Acceptance: TUnit in each repo; registry entries; dogfood one sample (mesh load or input mode).


Phase 2 — Frank P1: infrastructure + game lane (4–6 weeks)

#TargetSourceDepends
2.1`novolis-scheduling`Frank.CronJobsTesting GPR
2.2Extend `novolis-messaging`Frank.Messaging facadeChannels on GPR
2.3`novolis-audio` (preferred) or Raylib facetFrank.GameEngine.AudioIndependent
2.4ViewPose bridge doc + dogfood helpersimulation-viewpose-to-renderingSimulation + Rendering packages only
2.5Codegen bindings backlog (selective)codegen-bindings-backlogPhase 6 doc enrichment deferred

Revise: gameengine-audio, frank-messaging-facade, frank-scheduling-cronjobs.


Phase 3 — Product patterns (mine; apps adopt platform) (ongoing)

Not new monolith repos — adapters in products + small platform facets.

ProductPathPlatform workAppendix
FleetCommanderD:\repos\FleetCommanderAdopt Novolis.Simulation.Replay in headless tests; keep domain in productfleetcommander-patterns
Star Conflicts RevoltD:\github\StarConflictsRevoltEvent journal (IGameEvent + IEventStore) stays product; add optional ISimulationEventStore<T> in Simulation only if second consumer; map tick snapshots via Replaystar-conflicts-revolt-patterns
Dogfoodingnovolis-dogfoodingPackageReference-only; bridge ViewPose → CameraSnapshotinternal bridge doc

Future (spec only): `inertial-frame-stack-spec.md` → novolis-spatial when SCR needs it (out of scope for this plan’s code waves).


Phase 4 — Frank P2: workflows, data, codegen, ML (6+ weeks)

#TargetSourceDepends
4.1`novolis-workflows`Frank.WorkflowEngineMapping + Cron + Messaging
4.2`novolis-data` EF facetFrank.EntityFrameworkCoreTesting
4.3Codegen devtools facetsFrank.SolutionManager, GitKit, Blazor.JsInteropGeneratorfrank-codegen-devtools
4.4ML remainder auditFrank.ML domain/presentationfrank-ml-remainder; apps only for presentation

Phase 5 — Governance and CI (parallel with Phase 0–1)

#WorkSource
5.1ACS: AGENTS.md + .ai/index.md + adapted Verify-AcsRepo.ps1D:\repos\agent-contracts-standard — agent-contracts
5.2Central GitHub Actions from D:\repos\Workflowsworkflows-and-release-ci
5.3DependenciesExplorer maintainer toolgithub-frank-mine-extra

Explicit skip / inspiration-only (no platform import waves)

Consolidate into master plan “Do not import” table from:

Includes: WPF, HttpDude, Finance UBL, TorrentClient, bullet3/ravendb/MonoGame vendoring, Frank.GameEngine bulk migration (Rendering.RayLib, Physics, Primitives 3D), Unity `rebellion2`, semantic-kernel in platform.

Bedrock.Framework: no fork; optional middleware/logging only (bedrock appendix — Tcp slice done).


Verification checklist (every phase)

  1. pwsh -File novolis-governance/scripts/verify-nuget-only.ps1 → exit 0
  2. Affected solution dotnet build + dotnet test (MTP-compatible on .NET 10 SDK)
  3. Pack affected packages 2026.1.*; bump consumer Directory.Packages.props
  4. Update master plan status table + frank-inventory row

Suggested implementation order (single backlog)

Phase0 (Math GPR, Numerics sunset, docs) 
  → Phase1 (Mapping, Raylib Loaders, Raylib Input)
  → Phase2 (Cron, Messaging, Audio) in parallel with Phase5 (ACS, CI)
  → Phase3 (SCR Replay adoption, FC tests)
  → Phase4 (Workflow → EF → Codegen devtools → ML audit)

What you get after consolidation

  • One place to track status (todo / in progress / done / skip).
  • Clear dependencies (Mapping before Workflow; Math GPR before simulation tests).
  • No duplicate “P0” lists across 37 files.
  • Appendices remain for deep “how” without maintaining parallel priority tables.