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

Frank.Markdown + Frank.Mermaid → Novolis-Platform

dotnetgovernancenovolis

name: Markdown Mermaid org migration overview: Migrate Frank.Markdown and Frank.Mermaid from frankhaugen into a new Novolis-Platform multi-package repo (novolis-markup), following the existing extract/rebuild playbook—not repo transfer—and archive the two personal repos after NuGet preview ships. todos:

  • id: gov-signoff

content: "Update governance: novolis-markup domain, wave-10 brief, inventory, naming doc, migrate-frank-slice replacements, sunset banners" status: completed

  • id: scaffold-repo

content: Create Novolis-Platform/novolis-markup scaffold (slnx, CI, release, global.json net10.0) status: completed

  • id: migrate-markdown

content: Extract Frank.Markdown → src/Novolis.Markup.Markdown + port ~38 xUnit tests to TUnit status: completed

  • id: migrate-mermaid

content: Extract Frank.Mermaid → src/Novolis.Markup.Mermaid + port tests; relocate or drop Docs sample status: completed

  • id: registry-release

content: Register packages, ship 0.1.0-preview.1, archive frankhaugen/Frank.Markdown and Frank.Mermaid with sunset READMEs status: completed isProject: false


Repos found (frankhaugen)

RepoRoleNuGetDepsNovolis status
Frank.MarkdownFluent GitHub-flavored Markdown builderFrank.MarkdownNone (library)Not migrated — P1 hold in frank-inventory.md
Frank.MermaidFluent Mermaid diagram text builder (flowchart, sequence, gantt, …)Frank.MermaidNone (library)Not migrated — not listed separately from Reflection
Frank.Reflection.Mermaid (package inside Reflection repo)Reflection → classDiagram stringsFrank.Reflection.MermaidFrank.ReflectionAlready migrated → Novolis.CodeGen.Reflection.Mermaid in novolis-codegen

Out of scope (per your choice): Frank.Blazor.Mermaid, Frank.MarkdownEditor (apps/UI).

Important distinction: Frank.Mermaid (standalone repo) and Frank.Reflection.Mermaid (codegen) are different libraries. Do not fold standalone Mermaid into novolis-codegen; keep reflection diagrams in Novolis.CodeGen.Reflection.Mermaid.

flowchart LR
  subgraph personal [frankhaugen - wave 10]
    FMd[Frank.Markdown]
    FMe[Frank.Mermaid]
  end
  subgraph org [Novolis-Platform - NEW]
    NmMd[Novolis.Markup.Markdown]
    NmMe[Novolis.Markup.Mermaid]
  end
  subgraph codegen [novolis-codegen - done]
    Rm[Novolis.CodeGen.Reflection.Mermaid]
  end
  FMd -->|extract| NmMd
  FMe -->|extract| NmMe
  FMd -.->|archive after ship| FMd
  FMe -.->|archive after ship| FMe

Frank.Reflection’s deferred Roslyn/doc path uses Frank.Markdown as a NuGet dependency (Frank.Reflection.Roslyn); that is a later codegen wave, not part of this repo merge.


Org repo name (chosen)

`novolis-markup`

GitHub repoNovolis-Platform/novolis-markup
DomainMarkup
PackagesNovolis.Markup.Markdown, Novolis.Markup.Mermaid
SolutionNovolis.Markup.slnx

Why this name: Both libraries produce text markup consumed by docs tools (GitHub-flavored Markdown and Mermaid diagram syntax). The name is neutral, covers both facets, and does not collide with novolis-codegen (reflection/Roslyn) or novolis-templates.

Alternatives not used:

RepoPackagesWhy skipped
novolis-docsNovolis.Docs.*Governance draft name; “docs” overlaps with governance/docs repos conceptually
novolis-authoringNovolis.Authoring.*Longer domain; less precise than “markup”

Avoid: novolis-mermaid (excludes Markdown), novolis-markdown (excludes Mermaid), novolis-diagrams (misleading for Markdown).


Governance prerequisites (before coding)

Current frank-inventory.md non-goal: “Create `novolis-docs` for Markdown without governance approval.” Resolve by updating governance to `novolis-markup` instead:


Target layout (matches Novolis convention)

novolis-markup/
  src/Novolis.Markup.Markdown/
  src/Novolis.Markup.Mermaid/
  tests/Novolis.Markup.Markdown.Tests/
  tests/Novolis.Markup.Mermaid.Tests/
  Novolis.Markup.slnx
  .novolis/packages.json
  Directory.Build.props
  Directory.Packages.props
  global.json          # net10.0, SDK 10.x (align with other waves)
  .github/workflows/   # ci.yml + release.yml (copy from novolis-math or novolis-codegen)

No cross-package ProjectReference between Markdown and Mermaid (both are independent today).


Migration steps (extract/rebuild, not git transfer)

Follow frank-migration-runbook.md:

  1. Scaffold Novolis-Platform/novolis-markup from novolis-template-dotnet (or clone structure from novolis-math).
  2. Source: shallow clone into bootstrap/scratch/frank-eval/:
  • Frank.Markdown
  • Frank.Mermaid
  1. Extract with migrate-frank-slice.ps1 into src/ / tests/ (two slices).
  2. Tests — port xUnit → TUnit (naming.md):
  • Frank.Markdown: ~38 [Fact] tests across 3 files (xUnit + Moq today)
  • Frank.Mermaid: tests under Frank.Mermaid.Tests/ (verify count during slice)
  • Drop xUnit/Moq/JetBrains test packages; use TUnit + Novolis.Testing.TUnit only if needed
  1. Build: dotnet build / dotnet test on net10.0.
  2. Registry: add novolis-registry/packages/novolis.markup.markdown.json and novolis.markup.mermaid.json.
  3. Release: 0.1.0-preview.1 per package (same pattern as wave 5 codegen).
  4. Personal repos — archive:
  • Apply sunset banner from frank-sunset-banners.md pointing to Novolis.Markup.* / novolis-markup
  • Archive frankhaugen/Frank.Markdown and frankhaugen/Frank.Mermaid
  • Optional: leave NuGet Frank.* packages unlisted with README pointing to Novolis.Markup.* (no binding redirect required — different package IDs)

Do not use GitHub “Transfer repository” for these libs; Novolis policy is extract without history transfer.


Frank.Mermaid extras

  • Frank.Mermaid.Docs sample project: move to samples/Novolis.Markup.Mermaid.Docs/ or drop if redundant with README examples.
  • README currently mentions “Blazor component” in places but the core package is renderer-agnostic diagram text — fix README during migration.

Dependency / downstream notes

ConsumerAction after wave 10
Frank.Blazor.Mermaid (personal, out of scope)Would need Novolis.Markup.Mermaid if ever migrated
Frank.Reflection.Roslyn (deferred)Switch PackageReference from Frank.Markdown → Novolis.Markup.Markdown when Roslyn wave runs
novolis-codegenNo change — keep Novolis.CodeGen.Reflection.Mermaid separate

Suggested tracking

ItemAction
Governance PRSign off novolis-markup domain + wave 10 brief
novolis-markup issue #1Migrate Novolis.Markup.Markdown
novolis-markup issue #2Migrate Novolis.Markup.Mermaid
novolis-registry PRTwo package entries
Personal reposArchive after preview NuGet publish