Platform import master plan
Policies that keep the org coherent
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:
| Artifact | Role |
|---|---|
| [`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 --> phase5Global 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:\reposclones (bullet3, raylib, ravendb, …) andD:\dotnetrepos(Bedrock, aspnetcore, …) — inspiration only; use NuGet or reimplement slices. - Cross-repo:
PackageReferenceonly (`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)
| Item | Evidence | Appendix |
|---|---|---|
| Simulation replay (FC patterns) | `Novolis.Simulation.Replay` in slnx | fleetcommander-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.md | gameengine-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/`.
| Workstream | Actions | Acceptance |
|---|---|---|
| GPR / local feed | Ship messaging pilot per nuget-setup.md; pack Math 2026.1.* (Arrays, Topology, Geometry), Simulation.Replay, Tcp.Abstractions | Consumers restore without Ray3/Sphere3 missing types |
| Math BCL wave | math-bcl-refactor-publish-wave: consumer Directory.Packages.props, release notes, verify-nuget-only.ps1 exit 0 | Physics/Rendering/Simulation/dogfooding build on packages only |
| Physics.Numerics sunset | physics-numerics-package-sunset: fix README, remove csproj edges, delete package | No production Ray3d guidance |
| Rendering/math polish | viewbasis, ilgpu-bvh-slab-parity, rigidtransform | Tests green; single slab/ray authority |
| Doc alignment | governance-docs-stale-references, simulation-layer-policy Topology line, cursor rule Ray3 | Agents see consistent names |
Phase 1 — Frank P0: new platform packages (3–5 weeks)
Sources: D:\frankrepos (primary). Appendices: frank-mapping, gameengine-assets, gameengine-input.
| # | Target | Source | Notes |
|---|---|---|---|
| 1.1 | `novolis-mapping` (Novolis.Mapping, .Analyzers; Documents wave 1b) | Frank.Mapping | Blocks 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.Input | IInputSource, 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)
| # | Target | Source | Depends |
|---|---|---|---|
| 2.1 | `novolis-scheduling` | Frank.CronJobs | Testing GPR |
| 2.2 | Extend `novolis-messaging` | Frank.Messaging facade | Channels on GPR |
| 2.3 | `novolis-audio` (preferred) or Raylib facet | Frank.GameEngine.Audio | Independent |
| 2.4 | ViewPose bridge doc + dogfood helper | simulation-viewpose-to-rendering | Simulation + Rendering packages only |
| 2.5 | Codegen bindings backlog (selective) | codegen-bindings-backlog | Phase 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.
| Product | Path | Platform work | Appendix |
|---|---|---|---|
| FleetCommander | D:\repos\FleetCommander | Adopt Novolis.Simulation.Replay in headless tests; keep domain in product | fleetcommander-patterns |
| Star Conflicts Revolt | D:\github\StarConflictsRevolt | Event journal (IGameEvent + IEventStore) stays product; add optional ISimulationEventStore<T> in Simulation only if second consumer; map tick snapshots via Replay | star-conflicts-revolt-patterns |
| Dogfooding | novolis-dogfooding | PackageReference-only; bridge ViewPose → CameraSnapshot | internal 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)
| # | Target | Source | Depends |
|---|---|---|---|
| 4.1 | `novolis-workflows` | Frank.WorkflowEngine | Mapping + Cron + Messaging |
| 4.2 | `novolis-data` EF facet | Frank.EntityFrameworkCore | Testing |
| 4.3 | Codegen devtools facets | Frank.SolutionManager, GitKit, Blazor.JsInteropGenerator | frank-codegen-devtools |
| 4.4 | ML remainder audit | Frank.ML domain/presentation | frank-ml-remainder; apps only for presentation |
Phase 5 — Governance and CI (parallel with Phase 0–1)
| # | Work | Source |
|---|---|---|
| 5.1 | ACS: AGENTS.md + .ai/index.md + adapted Verify-AcsRepo.ps1 | D:\repos\agent-contracts-standard — agent-contracts |
| 5.2 | Central GitHub Actions from D:\repos\Workflows | workflows-and-release-ci |
| 5.3 | DependenciesExplorer maintainer tool | github-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)
pwsh -File novolis-governance/scripts/verify-nuget-only.ps1→ exit 0- Affected solution
dotnet build+dotnet test(MTP-compatible on .NET 10 SDK) - Pack affected packages
2026.1.*; bump consumerDirectory.Packages.props - 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.