Skip to content

Reports

Terro Fergius edited this page Sep 2, 2026 · 4 revisions

Reports

A scan can leave the editor as CSV, JSON or HTML. Every row carries the asset path, the rule it failed, the severity and the fix that was proposed, so the file stands on its own for someone who does not have the project open.

Note: HTML is the free format. CSV and JSON, and the commandlet that writes them from CI, are in the full version. See Free and Full.

You can label a report with a milestone, and if you export into the same folder twice the second one tells you what is new and what got fixed since.

Entry points

Four ways to get one out. The file is the same whichever you use.

Export Report, file save dialog

Where How to trigger Source data
Tools menu In the Tools menu, under the Asset Standards Validator heading, open the Tools submenu and pick Export Report... Runs a fresh full audit
The panel Export Report in the panel toolbar Whatever the panel is showing, so a filtered subset if you filtered it
Console command ASV.Export <format> <output_dir> [milestone] Runs a fresh full audit
Commandlet (CI) -run=ASVCommandlet -format=html -output=path Runs a fresh full audit headlessly

Tip: The panel is the only one that can export part of a scan. Filter it down to 40 of 200 results, say the P0s in one folder, and that is what lands in the file. Everything else runs a fresh full audit first.

Output files

Every export writes two files to the chosen directory:

  • ASV_Report_2026-04-14_14-30-00.<ext>, timestamped, so old ones pile up instead of vanishing
  • ASV_Report_latest.<ext>, overwritten every time, which is the one to point a script at

A third file, .asv-report.json, goes into the same folder. It is bookkeeping for the diff: export again into that folder with the same checker config and the new report gains a diff section listing what appeared and what got fixed. Change the config and the diff is skipped, because the two runs are not comparable.

CSV format

Plain comma-separated UTF-8. Opens in Excel or Sheets, and any script can read it.

Comment header

The first lines begin with #, which most CSV parsers skip. They hold the audit metadata:

# schemaVersion: 1.0
# timestamp: 2026-04-14T14:30:00.000Z
# projectName: MyGame
# asvVersion: 0.5.0
# checkerConfigs: StrictConfig
# scanRoots: /Game/
# auditSource: fresh_audit
# assetsScanned: 1247
# assetsWithViolations: 38
# assetsWithCriticalViolations: 15
# totalViolations: 38
# healthScore: 94.32
# p0: 5  p1: 12  p2: 18  p3: 3  autoFixable: 10

Columns

Column Description
AssetPath Full content path, e.g. /Game/Characters/BP_Enemy
AssetClassName UE class name, e.g. Blueprint
PackagePath Parent folder path, e.g. /Game/Characters
RuleId Rule identifier, e.g. missing_prefix
Severity P0 / P1 / P2 / P3
Problem Human-readable description of the violation
Suggestion Short suggested action, or empty if no fix is available
AutoFixAvailable true / false
ProposedFix Detailed proposed fix string used by auto-fix
ValidatorName Validator class, e.g. ASVValidator_NamingConvention
CheckerName Checker config asset that triggered this rule
TriggerName Trigger class that started the audit, e.g. ASVTrigger_Manual

JSON format

Condensed UTF-8 JSON, shaped for something else to read: a CI script, a dashboard, whatever you use to watch the numbers over time.

Top-level structure

{
  "meta": { ... },
  "summary": { ... },
  "diff": { ... },          // only present if a previous report exists with same config
  "violations": [ ... ]
}

meta

Field Description
schemaVersion Always "1.0" in this release
timestamp ISO 8601 timestamp: 2026-04-14T14:30:00.000Z
projectName Project name from FApp::GetProjectName()
asvVersion Plugin version string
milestoneLabel Label passed via -milestone or console command, or empty string
auditSource fresh_audit, accumulated, or filtered
checkerConfigNames Sorted array of the active checker config names, used to decide whether two runs can be compared
scanRoots Array of scanned content paths, e.g. ["/Game/"]

summary

Field Description
assetsScanned Total assets checked
totalIssues Total violation count
p0 / p1 / p2 / p3 Per-severity counts
healthScore Percentage of assets with no P0/P1 violations: (scanned − criticalAssets) / scanned × 100
topRules Array of {"rule", "count"}, sorted by count descending, top 10
byFolder Map of top-level folder → issue count
byValidator Map of validator name → issue count
top3Actions Top 3 most common suggested fixes

diff (optional)

Only there when the folder already holds an .asv-report.json from an earlier run and the checker config is the same one.

Field Description
previousTimestamp Timestamp of the previous run
deltaTotal Net change in total issues (positive = more issues)
deltaP0 / deltaP1 / deltaP2 / deltaP3 Per-severity delta
newCount Violations not in the previous run
resolvedCount Violations from the previous run that are gone
newViolations Array of new violation objects (same shape as items in violations)

violations array

Each item has: assetPath, assetClassName, packagePath, ruleId, severity, problem, suggestion, autoFixAvailable, proposedFix, validatorName, checkerName, triggerName.

HTML report

One self-contained HTML file. Nothing is fetched from the network, so it opens anywhere. Designed for sharing with leads and producers who don't have the editor open.

HTML audit report, health score, top violations by rule and folder

Executive summary

The top of the page carries the health score in green, yellow or red, the issue count broken down by severity, how many assets were scanned, which rules were broken most, which folders hold the problems, and what to do first.

Violations table

Interactive table with:

  • A search box that filters every column as you type
  • Sorting on any column header
  • Pages of 50 rows, so a big report stays quick in the browser
  • A toggle between one row per violation and results grouped by asset

Health score thresholds

Score Color Meaning
≥ 90% Green Pipeline-safe, only minor issues left
70–89% Yellow Needs attention, there are P0 or P1 violations
< 70% Red Critical, a lot of P0 and P1 violations

Tip: The health score counts assets, not violations. An asset with five P0s is one affected asset, so one badly named file cannot drag the whole score down on its own.

Commandlet flags

From CI, the export flags sit alongside the rest of the commandlet arguments:

UnrealEditor-Cmd.exe MyProject.uproject -run=ASVCommandlet \
  -Root=/Game/Content \
  -severity=P0 \
  -format=html \
  -output=C:/Artifacts/Reports \
  -milestone=Sprint-42
Flag Values Default Description
-format csv, json, html none Export format. If omitted, no export file is written.
-output Directory path none Where to write. The folder is created if it is not there.
-milestone Any string Empty Label embedded in the report header (e.g. Sprint-42, Beta-1.3).

Exit codes:

  • 0: clean, or there were violations but all of them below the -severity you asked about
  • 1: something was found at -severity or worse
  • 2: the report could not be written, bad path or no space

Console command

There is a console command, usable from the editor's console or from -ExecCmds:

ASV.Export html C:/Reports/MyProject Sprint-42
Argument Required Description
<format> Yes csv, json, or html
<output_dir> Yes Directory to write to
[milestone] No Optional label embedded in the report

It runs a full audit first, then writes the file. The results also go to the Output Log and to the Content Validation listing in the Message Log.

Tip: To export from a build pipeline without the commandlet, add -ExecCmds="ASV.Export html C:/Reports;Quit" to the editor launch command. Quit closes the editor once the export is done.

Clone this wiki locally