Fuaran.UI.Validator
0.93.0
Prefix Reserved
dotnet add package Fuaran.UI.Validator --version 0.93.0
NuGet\Install-Package Fuaran.UI.Validator -Version 0.93.0
<PackageReference Include="Fuaran.UI.Validator" Version="0.93.0" />
<PackageVersion Include="Fuaran.UI.Validator" Version="0.93.0" />
<PackageReference Include="Fuaran.UI.Validator" />
paket add Fuaran.UI.Validator --version 0.93.0
#r "nuget: Fuaran.UI.Validator, 0.93.0"
#:package Fuaran.UI.Validator@0.93.0
#addin nuget:?package=Fuaran.UI.Validator&version=0.93.0
#tool nuget:?package=Fuaran.UI.Validator&version=0.93.0
Fuaran.UI.Validator
Build-time validator for Fuaran UI trees — an F# AST walker that gates Fuaran.X "id" { ... } author code against the schema contract in fuaran-validator.manifest.json before runtime. Surfaces structural defects (duplicate NodeIds, malformed Bindings, Action.Dispatch payloads against unknown Msg cases, RowType mismatches) as CLI findings with file:line locations, with FUARAN9xx warning + error codes mirroring the §4d AI-recovery error format.
Usage
Fuaran.UI.Validator <project.fsproj> [--module-pattern SUBSTR]
[--manifest PATH]
[--format plain|json]
Exit codes: 0 on no Error-severity findings, 1 on at least one Error, 2 on malformed CLI arguments or missing project file. Warnings do not affect the exit code; an absent manifest emits FUARAN900 (warning) and silences the schema-coupled checks. See Fuaran/docs/VALIDATOR-MANIFEST.md for the manifest schema; see Fuaran/docs/TECHNICAL_GUIDE.md for how the validator integrates with the wider Phase 12 pipeline.
How it runs
Each source file under the project is parsed once, and every check is a visitor over that one parsed-input list. The set of smart constructors it recognises, and which of them root a tree for NodeId uniqueness (an outermost constructor that takes a child node — Fuaran.box, stack, card, dashboard, …), is derived from the Fuaran module by reflection rather than listed by hand, so a new constructor is checked from the release that adds it. The codes it emits, and the build-time codes it has retired in favour of the tree-time validator, are enumerated in docs/ERROR_CODES.md §4.
Suppressing a finding
Some source deliberately holds a shape the validator is right to reject in application code — most often a negative test, whose whole purpose is to construct the defect and assert the runtime reports it. There the finding is correct about the code and wrong about the intent, and no edit fixes it without destroying the test. Two comment pragmas opt a source out:
// fuaran-validator: disable FUARAN001, FUARAN058 — negative-test fixtures
File-scoped: suppresses the listed codes anywhere in the file, wherever the comment sits (convention: beside the module's doc comment, so a reader meets it before the fixtures).
// fuaran-validator: disable-next-line FUARAN044
Line-scoped: suppresses the listed codes on the following source line only — the precise form, for a single exceptional call site in a file that should otherwise stay gated.
Any text after the codes is free prose, so a pragma carries its justification on the same line. A pragma naming a code that never fires is inert, and a pragma naming no code at all suppresses nothing (a bare disable is a typo, not a blanket). Suppression applies to warnings as well as errors, and filters only the reporting layer — every check still runs. Suppressed findings are counted in the run summary (… 0 error(s), 3 warning(s), 2 suppressed, …) so a silenced rule stays visible in the build log.
Apache-2.0 licensed — see the repo LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Fable.Core (>= 5.0.0)
- FSharp.Compiler.Service (>= 43.12.204)
- FSharp.Core (>= 10.1.300)
- Fuaran.Compute.DataFrame (>= 0.38.1)
- Fuaran.Core.AiSurface (>= 0.36.0)
- Fuaran.Core.Column (>= 0.36.0)
- Fuaran.Core.Conformance (>= 0.36.0)
- Fuaran.Core.Function (>= 0.36.0)
- Fuaran.Core.Idl (>= 0.36.0)
- Fuaran.Core.Observer (>= 0.36.0)
- Fuaran.Core.Ops (>= 0.36.0)
- Fuaran.Core.OpStream (>= 0.36.0)
- Fuaran.Core.OpStream.Dag (>= 0.36.0)
- Fuaran.Core.Projection (>= 0.36.0)
- Fuaran.Core.Propagation (>= 0.36.0)
- Fuaran.Core.Query (>= 0.36.0)
- Fuaran.Core.Tree (>= 0.36.0)
- Fuaran.Core.Validator (>= 0.36.0)
- Fuaran.Core.Wire (>= 0.36.0)
- Fuaran.UI (>= 0.93.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.93.0 | 25 | 10/10/2026 |
| 0.92.0 | 69 | 10/6/2026 |
| 0.91.0 | 85 | 10/4/2026 |
| 0.90.0 | 90 | 10/2/2026 |
| 0.88.0 | 139 | 9/30/2026 |
| 0.86.0 | 91 | 9/28/2026 |
| 0.85.0 | 166 | 9/20/2026 |
| 0.84.0 | 227 | 9/17/2026 |
| 0.83.0 | 117 | 9/15/2026 |
| 0.81.0 | 98 | 9/12/2026 |
| 0.80.0 | 188 | 9/9/2026 |
| 0.79.0 | 128 | 9/9/2026 |
| 0.78.1 | 175 | 9/8/2026 |
| 0.78.0 | 111 | 9/7/2026 |
| 0.77.0 | 109 | 9/6/2026 |
| 0.76.0 | 185 | 9/6/2026 |
| 0.75.0 | 151 | 9/4/2026 |
| 0.71.0 | 102 | 9/4/2026 |
| 0.70.0 | 122 | 9/4/2026 |
| 0.46.0 | 179 | 8/28/2026 |