description: "Run a preset suite of audits in parallel" argument-hint: "--preset <name>"
Audit Suite Orchestrator
Runs a named preset — a curated list of other /audit-* skills — by fanning
them out as background agents in parallel, then merges their reports into one
summary. This skill owns no audit logic of its own; it only sequences and
aggregates the individual audits. Shared protocol (project layout, severity,
dedup, report format) lives in .claude/commands/_audit-common.md and
.claude/commands/_audit-severity.md — not repeated here.
Every audit referenced below is a live skill under
.claude/commands/audit-<name>/SKILL.md, invoked as /audit-<name>.
The full current set (27): audio, character, concurrency, ecs, esm, fnv, fo3,
fo4, incremental, legacy-compat, nif, nifal, oblivion, performance, physics,
publish, regression, renderer, runtime, safety, save, scripting, skyrim,
speedtree, starfield, tech-debt, ui.
(/audit-publish is a post-processing step, not an analysis pass — it never
appears in a preset. /audit-scripting owns crates/scripting + crates/pex +
crates/papyrus; /audit-save owns crates/save — both added 2026-06-23.
Four owner audits added 2026-08-13, closing the largest coverage gaps:
/audit-esm owns crates/plugin, /audit-ui owns crates/ui, /audit-physics
owns crates/physics + byroredux/src/ragdoll.rs, /audit-character owns
crates/core/src/character. Presets that used to substitute generic audits for
those areas now call the owner directly.)
--focus numbers below track the dimension numbering inside each target skill.
If a target audit is renumbered, update the focus lists here in lockstep — the
suite is the one place those numbers are duplicated, so it drifts first.
Preset Index
| Preset | When | Audits |
|--------|------|--------|
| quick | after any change, < 10 min | incremental |
| pre-release | before tagging | safety · renderer · ecs · regression |
| comprehensive | monthly / pre-milestone | all subsystem + per-game + runtime |
| tech-debt-deep | after a milestone closes | tech-debt · incremental |
| per-game-all | per-game compat sweep | the 6 game audits |
| nif-all-games | NIF parser vs every game | nif ×6 game corpora |
| runtime-regression | telemetry diff vs baselines | runtime |
| esm-deep | after ESM/plugin-parser changes | esm · incremental · (per-game when one title is the target) |
| physics-deep | after physics / ragdoll / character-controller changes | physics · concurrency · safety |
| character-deep | after CHARAL ruleset / progression changes | character · esm · ecs |
| nif-deep | after NIF parser changes | nif · nifal · safety · incremental |
| nifal-deep | after NIFAL translation changes | nifal · nif · renderer · ecs |
| renderer-deep | after renderer changes | renderer · performance · concurrency · safety |
| rt-deep | after RT / denoiser / G-buffer changes | renderer · performance · concurrency |
| material-deep | after material-table / PBR changes | renderer · safety |
| texture-roles-deep | after MaterialTextureSet / ImportedMaterial changes | nifal · fo4 · starfield · renderer |
| upscaler-deep | after FSR3 / presentation / exposure changes | renderer · safety · performance |
| ui-deep | after Scaleform/SWF (R4 + M48) changes | ui · safety · concurrency · tech-debt |
| water-deep | after water changes (render or physics half) | renderer · physics · esm · concurrency · safety |
| volumetrics-deep | after volumetric-lighting changes | renderer · performance · safety |
| bloom-deep | after bloom-pyramid changes | renderer · performance · safety |
| skin-deep | after GPU-skinning / BLAS-refit changes | renderer · performance · concurrency · safety |
| audio-deep | after audio (kira) changes | audio · concurrency · safety |
| scripting-deep | after scripting / .pex / Papyrus / recognizer changes | scripting · ecs · incremental |
| save-deep | after save/load changes | save · ecs · incremental |
| speedtree-deep | after SpeedTree (.spt) changes | speedtree · incremental |
| streaming-deep | after world-streaming / NPC-spawn changes | performance · concurrency · character · physics · safety |
| legacy-deep | after compatibility-mapping work | legacy-compat · incremental |
Broad Presets
--preset quick
Fast sanity check after a change (< 10 min):
/audit-incremental --commits 5
--preset pre-release
Run before tagging a release:
/audit-safety/audit-renderer/audit-ecs/audit-regression --limit 20
--preset comprehensive
Full coverage (longest — run monthly or before a major milestone). Every subsystem audit, every per-game audit, plus the runtime telemetry diff that catches what static audits structurally can't see:
/audit-renderer/audit-ecs/audit-safety/audit-concurrency/audit-performance/audit-nif/audit-nifal/audit-esm/audit-physics/audit-character/audit-ui/audit-audio/audit-speedtree/audit-scripting/audit-save/audit-legacy-compat/audit-tech-debt/audit-fnv/audit-fo3/audit-skyrim/audit-oblivion/audit-fo4/audit-starfield/audit-regression/audit-runtime --game all
With the four 2026-08-13 additions this preset now covers every crate in the
_audit-common.md crate→owner map. The residual gaps it does not cover are
crates/mod-runtime (folded into /audit-safety Dim 11), crates/hkx (folded
into /audit-scripting Dim 8), and crates/debug-server / crates/debug-protocol
(no owner). Name them in the summary rather than claiming full coverage.
--preset tech-debt-deep
Surface accumulated debt (run after a milestone closes, before opening the next):
/audit-tech-debt/audit-incremental --commits 30
Per-Game Presets
--preset per-game-all
Run every per-game compatibility audit (reference title first, then in compat-tier order):
/audit-fnv/audit-fo3/audit-skyrim/audit-oblivion/audit-fo4/audit-starfield
--preset nif-all-games
Exercise the NIF parser against every available game corpus (the --game arm
selects the on-disk data dir from _audit-common.md):
/audit-nif --game fnv/audit-nif --game fo3/audit-nif --game skyrim/audit-nif --game oblivion/audit-nif --game fo4/audit-nif --game starfield# Cydonia walkable — BSGeometry path exercised
--preset runtime-regression
Drive the engine headless on every supported game's representative cell and diff
the captured telemetry against the checked-in baseline TSVs. Catches regressions
in tex.missing / mesh.cache failed / fps / draw-call count under a real cell
load — see #1283:
/audit-runtime --game all
NIF / NIFAL Presets
--preset nif-deep
After NIF parser changes (stream position, version gating, block dispatch):
/audit-nif/audit-nifal# the parse → ECS material/collision boundary regresses with parser changes/audit-safety/audit-incremental --commits 10
--preset nifal-deep
After NIFAL canonical-translation changes — the single ImportedMesh → Material
boundary (byroredux/src/material_translate.rs), Material::resolve_pbr
(crates/core/src/ecs/components/material.rs, metalness/roughness are plain f32),
typed particle emitter blocks, and collision-shape translation
(crates/nif/src/import/collision/mod.rs). Spec: docs/engine/nifal.md. /audit-nifal
owns the full canonical-translation tier (9 dimensions); this preset is the
cross-cutting regression sweep around it:
/audit-nifal/audit-nif --focus 4,5# parse-side geometry/import handoff (dim 4) + collision/shader blocks (dim 5)/audit-renderer --focus 6,7,17# NIFAL material (dim 6) + material table (dim 7) + Disney BSDF/PBR gating (dim 17)/audit-ecs# particle emitter components + apply_emitter_params system
Renderer Presets
Renderer dimension map (from /audit-renderer, 23 dimensions): 1 AS · 2 SSBO+rays ·
3 GPU-struct layout · 4 sync/barriers · 5 memory/lifecycle · 6 NIFAL material ·
7 material table · 8 denoiser/composite · 9 skinning · 10 camera-relative precision ·
11 pipeline/render-pass · 12 cmd buffer · 13 TAA · 14 caustic splat · 15 water ·
16 volumetrics+bloom · 17 Disney BSDF/soft shadows · 18 sky/weather · 19 tangent
space · 20 debug/telemetry · 21 Cornell harness · 22 light animation ·
23 FSR3 upscaler + presentation chain (added 2026-07-27).
--preset renderer-deep
After significant renderer changes — all 23 dimensions plus the cross-cutting perf/concurrency/safety passes:
/audit-renderer/audit-performance --focus 1,2,3,5/audit-concurrency --focus 1,2,3/audit-safety
--preset rt-deep
After ray tracing / denoiser / G-buffer changes:
/audit-renderer --focus 1,2,8# AS + SSBO/ray queries + denoiser/composite/audit-performance --focus 1,3/audit-concurrency --focus 1,2
--preset material-deep
After material-table / PBR changes (GpuMaterial layout, dedup, SSBO,
Disney BSDF gating):
/audit-renderer --focus 6,7,17# NIFAL material + material table + Disney BSDF/audit-safety
--preset texture-roles-deep
After changes to MaterialTextureSet, ImportedMaterial, merge_external_material,
or translate_material — the 2026-07-27 cross-game texture-role unification
(1d94eb24 + 05d68926 + c8c8a834). Roles are the new per-game seam, so a
mistake here is invisible in one game and wrong in another:
/audit-nifal --focus 1,8# material boundary (narrowed signature) + texture-role vocabulary/audit-fo4# BGSM is the densest role producer/audit-starfield# CDB.matis the second densest, and the newest/audit-renderer --focus 6,7# NIFAL material + material table consumption
--preset upscaler-deep
After FSR 3.1 / presentation / exposure changes. FSR Quality is the engine default, so this is the default render path — a layout or barrier error here is not a feature bug, it is every frame:
/audit-renderer --focus 23,4,13# FSR dim + sync/barriers + TAA (shared jitter/motion vectors)/audit-safety#crates/fsr3-sysFFI# Safetycontracts/audit-performance --focus 1,3RunBYRO_VALIDATION=1alongside — layout errors here are structurally invisible tocargo test.
--preset ui-deep
After Scaleform/SWF UI changes (R4 + M48 host layer). /audit-ui (added
2026-08-13) now owns crates/ui/ — the host contract, profile split, ABC
adapter, navigator and render/device lifecycle. The three generic passes stay
because the crate straddles an FFI boundary and two drift-prone generated
surfaces:
/audit-ui# the owner: profile, bridge, AVM2 adapter, navigator, device, input/audit-safety --focus 1# Ruffle/wgpu FFI + offscreen readback lifetimes/audit-concurrency --focus 7# Ruffle local-executor pump vs. main loop/audit-tech-debt# generated AVM2 adapter + the pinned method catalogs are drift-prone
--preset water-deep
After water changes. WATAL is double-ended and its physics half shipped at
the 2026-08-10 checkpoint, so a water change is rarely render-only — buoyancy,
submerged damping and current drag read the same canonical WaterFlow the
shader does:
/audit-renderer --focus 1,2,8,14,15# AS + rays + composite + caustic splat + water dim/audit-physics --focus 6# the WATAL physics sink (buoyancy / damping / current)/audit-esm --focus 5# the tri-state XCLW / WRLD water decode at the CELL boundary/audit-concurrency --focus 1,2/audit-safety
--preset volumetrics-deep
After volumetric-lighting changes:
/audit-renderer --focus 1,2,5,16# AS + rays + memory + volumetrics/bloom dim/audit-performance --focus 1,3/audit-safety
--preset bloom-deep
After bloom-pyramid changes:
/audit-renderer --focus 4,8,16# sync + composite + volumetrics/bloom dim/audit-performance --focus 1,3/audit-safety
--preset skin-deep
After GPU-skinning / BLAS-refit changes (M29.x):
/audit-renderer --focus 1,9# AS (skinned BLAS) + GPU skinning compute/audit-performance --focus 1,6/audit-concurrency --focus 1,2,3/audit-safety
Subsystem Presets
--preset audio-deep
After audio (kira backend) changes — emitter/listener pose sync, spatial sub-track lifecycle, reverb send, streaming music:
/audit-audio/audit-concurrency --focus 6,7# GPU/teardown ordering + worker threads/audit-safety
--preset scripting-deep
After scripting changes — the .pex decompiler (crates/pex), the .psc
Papyrus parser (crates/papyrus), the AST→ECS recognizer chain + runtime
systems (crates/scripting), or the cell-loader script-attach path (M30/M47):
/audit-scripting/audit-ecs# recognizer-emitted components + scripting-runtime systems lock/stage ordering/audit-incremental --commits 10
--preset save-deep
After save/load changes — full-ECS-snapshot capture, type-erased registry,
atomic disk write + ring, validation gates, or the M45.1 live load-apply
(crates/save + the engine-side driver):
/audit-save/audit-ecs# snapshot completeness vs component registry + frame-boundary capture safety/audit-incremental --commits 10
--preset speedtree-deep
After SpeedTree (.spt) walker / billboard-fallback changes:
/audit-speedtree/audit-incremental --commits 10
--preset esm-deep
After ESM/ESP parser changes — the GRUP walk, SubReader byte accounting, a
per-record schema, the FormID remap, or the CELL/WRLD walkers
(crates/plugin/). Add the per-game audit when one title is the target, since
/audit-esm audits the parser as a parser and the per-game skills audit its
output for their own data:
/audit-esm/audit-incremental --commits 10/audit-<game>— only when the change is game-specific
--preset physics-deep
After physics changes — collider translation, the fixed-step accumulator, the
4-phase sync, ragdoll articulation, the character controller, or the WATAL
buoyancy sink (crates/physics/, byroredux/src/ragdoll.rs):
/audit-physics/audit-concurrency --focus 5,7# the resource↔storage lock dance in physics_sync_system/audit-safety
--preset character-deep
After CHARAL changes — a ruleset, a derived formula, a leveling model, or the
population boundary. /audit-esm joins because CHARAL's inputs (AVIF, CLAS,
NPC_) are decoded there, and a wrong FormID resolution is indistinguishable
from a wrong coefficient at the actor:
/audit-character/audit-esm --focus 4# AVIF / CLAS / NPC_ decode + dispatch coverage/audit-ecs# ActorValues / Perks / CharacterLevel component layer
--preset streaming-deep
After world-streaming / NPC-spawn changes (M40 / M41). NPC spawn is also CHARAL's only population site and the physics registration path, so both owners join:
/audit-performance --focus 7# world streaming & cell transitions/audit-concurrency --focus 7# worker threads (streaming, debug server)/audit-character --focus 5# the population boundary in npc_spawn.rs/audit-physics --focus 3# newcomer registration / release across cell churn/audit-safety
--preset legacy-deep
After compatibility-mapping work (Gamebryo 2.3 → Redux):
/audit-legacy-compat/audit-incremental --commits 10
Execution
- Parse the
--presetargument from$ARGUMENTS. If unknown, list the preset index above and stop. mkdir -p /tmp/audit.- Launch each audit in the preset as a background agent, max 3 concurrent. The audits are independent — they read the tree and write distinct reports — so they fan out in parallel; no ordering dependency between them.
- Each audit writes its own report to
docs/audits/AUDIT_<TYPE>_<TODAY>.md(per_audit-common.mdfinalization). - When all complete, produce a combined summary:
# Audit Suite Summary — <preset> — <date>
| Audit | Findings | CRITICAL | HIGH | MEDIUM | LOW | Report |
|-------|----------|----------|------|--------|-----|--------|
| Safety | 3 | 0 | 1 | 2 | 0 | AUDIT_SAFETY_... |
| ... | ... | ... | ... | ... | ... | ... |
Total: X findings (C critical, H high, M medium, L low)
- If any CRITICAL findings exist, warn prominently at the top of the summary.
- For each report that has findings, suggest:
/audit-publish docs/audits/AUDIT_<TYPE>_<TODAY>.md
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.