Novolis Docs
novolis-analyzers / design.md

Novolis analyzers — design

dotnetroslynanalyzersnovolis

Diagnostic ID ranges and package ownership:

RangePackageKind
NOV2001–NOV2011Novolis.Analyzers.StackBoundariesRoslyn — stack / island / Avalonia / MAUI
NOV2101–NOV2102Novolis.Analyzers.ConventionsRoslyn — naming conventions
NOV2201Novolis.Analyzers.OneTypePerFileRoslyn — one top-level type per file, with fixer
NOV3001–NOV3003Novolis.Analyzers.LicensingMSBuild tasks — safe licenses
FRANK4010–FRANK4011Novolis.Analyzers.CodeLengthRoslyn — line counts (legacy IDs)

StackBoundaries

IDRule
NOV2001No BCL numerics duplicates
NOV2002No Vector2 in Math/Physics/Simulation
NOV2003No Camera in Math
NOV2004Raylib ↔ Simulation forbidden
NOV2005Raylib must not reference rendering scene packages
NOV2006Only Novolis.Avalonia.* may reference Avalonia UI assemblies
NOV2007Math → Physics → Simulation → Gaming → Avalonia (no upward refs)
NOV2008Rendering ↔ Simulation forbidden
NOV2009Gaming must not reference Raylib or Rendering
NOV2010Only Novolis.Maui.* may reference Microsoft.Maui assemblies
NOV2011MAUI ↔ Avalonia forbidden

Local wiring: novolis-governance/build/Novolis.StackAnalyzers.props (also loads Conventions and OneTypePerFile).

OneTypePerFile

IDRuleFixer
NOV2201More than one top-level type in a source file. Nested types stay with their parent. Partials of the same type count as one. The type whose name matches the file stays; otherwise the first type stays.Yes — move each extra type to {TypeName}.cs. Fix All covers document, project, and solution.

Warning severity. Novolis.OneTypePerFile.props adds NOV2201 to WarningsNotAsErrors. Opt out: NovolisOneTypePerFile=false.

Conventions

IDRuleFixer
NOV2101Forbidden whole-word desk (desktop allowed)No
NOV2102No leftover Frank.* namespaces/usings in Novolis.* production assembliesYes — Frank → Novolis

Licensing

Allowlist: MIT, Apache-2.0, and OR combinations of only those.

CodeCheck
NOV3001Own PackageLicenseExpression on packable projects
NOV3002Dependency missing / file-only license (warning; error if NovolisSafeLicenseStrict=true)
NOV3003Dependency SPDX not allowlisted

Opt out: NovolisSafeLicenseCheck=false. Exempt: NovolisSafeLicensePackage items.

Publication

All packable projects must be listed in Novolis.Analyzers.slnx so merge/release pack workflows publish them to GitHub Packages / nuget.org.