Automated summary
Orchestrated audit command that checks Fallout New Vegas compatibility across the ByroRedux engine dimension by dimension (cell loading, ESM/NIF data, ragdoll, ambient AI and dialogue, consumables, HUD), each dimension running as its own agent.
Strengths
- Splits the audit into risk-ordered dimensions (cell loading first) with at most 3 concurrent agents and explicit code paths assigned to each dimension
- Embeds an authoring census of the shipped game data (archives, SCOL, BSSegmentedTriShape, absence of _far.nif) so agents avoid false findings
- Requires pulling reference numbers from ROADMAP.md, the feature matrix and baseline files instead of hardcoding them in the command
- Deduplicates against existing GitHub issues via `gh issue list` and scopes work by git delta so unchanged dimensions are skipped
- Calls out the toolchain prerequisite (rustc >= 1.96) without which bin-crate tests give no feedback
Limitations
- Deeply tied to the ByroRedux repository: paths, issue numbers, baselines and a local FNV install path are all hardcoded
- Requires an authenticated `gh` client for the target repo and a full local copy of the Fallout New Vegas data directory
- The provided content is truncated: only dimension 1 and part of the context are described although the command advertises 6 dimensions
- Assumes working knowledge of the engine internals (cell_loader, streaming, NIF/BSA formats); output is only actionable by a maintainer
Use it when a ByroRedux maintainer wants a targeted or full regression audit of Fallout New Vegas compatibility after a batch of engine changes.
Do not use it on another project, without a local FNV installation, or for a plain code review unrelated to game content loading.
Security analysis
CautionThe skill is a large, internally consistent audit procedure: it reads docs, runs git/cargo/test scripts, queries GitHub issues, and writes markdown reports. Nothing instructs deletion, credential access, or data egress beyond a repo-scoped `gh issue list`. The residual risk is ordinary-but-broad tooling (shell, network, local game-data reads, arbitrary repo scripts), so it is 'caution' rather than 'safe'.
- •No `allowed-tools` declared, yet the workflow assumes Bash, Read, Task/subagents, and network (git, cargo, gh, shell scripts) — the tool surface is broader than the manifest states.
- •Network egress: `gh issue list --repo matiaszanolli/ByroRedux` contacts GitHub with repo metadata; subsequent phases depend on that output.
- •Reads data outside the project tree at a hard-coded absolute path (`/mnt/data/SteamLibrary/steamapps/common/Fallout New Vegas/Data/`) and writes artifacts to `/tmp/audit/fnv/` and `docs/audits/`.
- •Executes repository shell scripts (`docs/smoke-tests/*.sh`, `scripts/fsr-bench-matrix.sh`, `scripts/check-playable-smoke-contracts.sh`) and long-running `cargo test --ignored` suites; behavior is whatever the checked-out repo contains at run time, so trust is delegated to the repo, not the skill.
- •`$ARGUMENTS` is interpolated into `--focus`; low risk since it only selects dimensions, but it is unvalidated input to a shell-invoking workflow.
- •No destructive, exfiltrating, obfuscated, or safety-disabling instructions found; no prompt-injection attempts inside the skill text.
- •No allowed-tools declared, yet the skill instructs shell execution (mkdir -p /tmp/audit/fnv, cargo test/cargo run, doc/smoke-tests/*.sh scripts, gh issue list against a remote repo, connecting to a local debug server on port 9876). All uses are legitimate for an audit workflow, but the permissions surface is broad and implicit.
- •Reads a host filesystem path outside the repo (`/mnt/data/SteamLibrary/.../Fallout New Vegas/Data/`) and requires it to exist; legitimate for this project but environment-coupled.
- •Executes shell scripts from `docs/smoke-tests/` and `scripts/` whose contents are not shown here; a reviewer should confirm those scripts do not assume privileges or perform destructive actions.
- •No exfiltration, obfuscation, credential access, or instruction-override attempts found; the content is a plain audit procedure.
Examples
/audit-fnv — run all six compatibility dimensions against my local Fallout New Vegas install and dedupe findings against open GitHub issues./audit-fnv --focus 1 — audit cell loading and streaming only; I just refactored byroredux/src/cell_loader/ and want to know if anything regressed against the FNV baselines./audit-fnv --focus 4,5 — check the ambient AI/dialogue and consumables dimensions after my ESM record changes, and file mechanism defects against the owning audit.description: "Per-game audit of Fallout New Vegas compatibility — reference title: cell load, ESM/NIF data, ragdoll, ambient AI + dialogue, consumables, HUD profile" argument-hint: "--focus <dimensions>"
Fallout New Vegas Compatibility Audit
FNV is the reference title — the most-validated end-to-end path and the reference realization for NIFAL material/physics and PHYSAL ragdoll. This audit owns FNV's data through the shared mechanisms (routing: .claude/commands/_audit-owners.md); a defect in the mechanism itself is filed against its owner audit, named under each dimension. A foundation that broke on FNV is the highest-severity finding this command can produce; the rest is regressions and unshipped polish.
Architecture: Orchestrator. Each dimension runs as a Task agent (max 3 concurrent).
Read .claude/commands/_audit-common.md (layout, methodology, dedup, finding format) and .claude/commands/_audit-severity.md for shared protocol.
Game Context
| Aspect | State |
|---|---|
| NIF / BSA | v20.2.0.7, bsver 34 (bsver::FO3_FNV) · BSA v104 (crates/bsa/src/archive/) |
| Archive priority | Last-listed wins per pool; Update.bsa is listed last in all three FNV pools (assets/debug_profiles.toml). every live FNV gate/bench harness mounts it last too (#5257, a4ede5fa0). Guard: byroredux/src/asset_provider/tests/archive_precedence.rs |
| Reference data | /mnt/data/SteamLibrary/steamapps/common/Fallout New Vegas/Data/ |
| Baselines (pull, never hardcode) | ROADMAP.md FNV row (parse rate + Prospector bench-of-record and its commit), docs/feature-matrix.md, .claude/audit-baselines/runtime/fnv-FreesideAtomicWrangler.tsv, crates/nif/tests/data/per_block_baselines/fallout_nv.tsv |
Authoring census (byte-scan of the shipped data, 2026-09-19 — these prevent false findings):
- 20 archives / 182 177 entries: 0
_far.nif, 0distantlod\. FNV object LOD isObjectLodScheme::FalloutLegacyBlocks;placement_lod_supportedis Oblivion-only (placement_lod_supported_is_oblivion_only). FNV also ships 25<world>.level4.high.x<X>.y<Y>.nifquads (6 inFallout - Meshes.bsa, 19 inLonesomeRoad - Main.bsa) that no code path consumes: censused-not-consumed by design (#4468, closed —probe_lod_corpuscounts them,ObjectLodScheme's doc explains why only the plain form is built); every one has a plain sibling, so it is fidelity only, not a coverage hole. - FalloutNV.esm: 98 SCOL bases / 1 084 REFRs; 0 MOVS / PKIN / MSWP; 219
XATO(all Activation Prompt strings, #3511 — not texture overlays) and 0XTNM/XTXR. - 989
BSSegmentedTriShapeblocks (fallout_nv.tsv).
Parameters (from $ARGUMENTS)
--focus <dimensions>: comma-separated numbers (e.g. 1,3). Default: all 6.
Phase 1: Setup
- Parse
$ARGUMENTS;mkdir -p /tmp/audit/fnv. - Dedup baseline:
gh issue list --repo matiaszanolli/ByroRedux --limit 200 --json number,title,state,labels > /tmp/audit/issues.json. - Confirm
Fallout New Vegas/Data/exists (required — FNV is the baseline). - Read the FNV rows above; every "regression" is judged against them, not against numbers in this skill.
- Scope by delta:
git log --since=<last AUDIT_FNV date> --format='%h %cs %s' -- <dimension Paths>; skim dimensions whose Paths did not change. - Toolchain: the
byroreduxbin crate needs rustc >= 1.96 (wasmtime 49, 15a6b1d2d) — use the rustup cargo perdocs/contributing.md§ Toolchain note (#4466) or bin-crate tests give no feedback.
Phase 2: Launch Dimension Agents (parallel)
Ordered by FNV risk: cell load first (highest blast radius), gameplay-data slices last.
Dimension 1: Cell Loading & Streaming
Subagent: general-purpose
Paths: byroredux/src/cell_loader/ (general files; terrain*, water.rs, lod*, object_lod.rs, placement_lod.rs are /audit-exterior), byroredux/src/scene/, byroredux/src/streaming/, docs/engine/pipeline-overview.md, docs/engine/exterior-grid-streaming.md
First step: git log --since=<date> --format='%h %cs %s' -- byroredux/src/cell_loader byroredux/src/scene byroredux/src/streaming
- Interior
GSProspectorSaloonInterior: entity/draw counts vs the ROADMAP row; the synchronous interior load isInteriorCellApplyJobbegin()+advance()under an unlimited budget, no longer a line-for-line twin inload_cell_with_masters(#5589,a4496c79b); every interior-load fix now lands once; XCLL lighting resolves (fog_far_coloroptional field; an authored LIGH falloff of 0.0 must resolve to the pre-Skyrim quadratic default,falloff_exponent_sentinel_resolves_per_layout_generationinbyroredux/src/systems/light_anim.rs);NiAlphaPropertydecal routing. - Exterior WastelandNV radius 3 and the FNV-specific data: default land texture
DirtWasteland01.ddsviaDefaultLandTexture::for_game(guarddefault_land_textures_exist_in_vanilla_archives,--ignored); WTHR/CLMT/terrain/water translation mechanism ->/audit-exterior. Repeatable gate:docs/smoke-tests/m-exteriors.sh fnv static|boundary|soak|cycle|water. - Cache and unload hygiene (mechanism:
/audit-safetyDim 3,/audit-performance):NifImportRegistryArc cache (byroredux/src/cell_loader/nif_import_registry_tests.rs); unload frees BLAS / Rapier / skin / inventory state (rapier_release_tests.rs,inventory_release_tests.rs,unload_skin_cleanup_tests.rs,unload_greyscale_lut_tests.rs, all underbyroredux/src/cell_loader/). FNV check: after a Prospector -> Goodsprings -> Prospector round trip the live-state owners return to baseline — named entities (entities),phys.statsbodies / static colliders,rt.integrityTLAS + BLAS bytes,skin.coverageslots,mesh.cacheentries. NotstatsEntities: that isWorld::next_entity_id, a never-reused spawn counter that only grows (#6060). - Persistent reference state across a cell round trip (door/loot/pickup state,
byroredux/src/cell_loader/reference_state.rs— mechanism/audit-gameplay,/audit-save):docs/smoke-tests/p0-door-interaction.sh fnv,p5-save-restart.sh fnv. Output:/tmp/audit/fnv/dim_1.md
Dimension 2: ESM Data Slice (FalloutNV.esm)
Subagent: general-purpose
Routing: GRUP walk, SubReader byte accounting, schema dispatch, FormID remap -> /audit-esm. This dimension owns the semantics that only show on FNV's masters.
Paths: crates/plugin/src/esm/records/, crates/plugin/src/esm/cell/, crates/plugin/src/equip.rs, crates/plugin/tests/parse_real_esm.rs
First step: cargo test -p byroredux-plugin --release --test parse_real_esm -- --ignored parse_rate_fnv_esm (one test at a time; whole-file --ignored runs can spike >20 GB).
index.total()>=FNV_TOTAL_FLOORand the ROADMAP/feature-matrix record counts; do not transcribe counts into this skill.- Gameplay-record spot checks: Varmint Rifle stats, NCR faction relations, VATS AVIF entries; the FNV actor-value roster and Health resolution (
fnv_actor_value_roster_and_health_resolve_on_shipped_master); NPC Health seeds from the authored NPC curve —NPC_ DATABase Health + thefAVDNPCHealth*slopes, never the player curve (#5238,c71eeed80;fo3_fnv_named_npc_health_matches_the_authored_curve); a non-auto-calc NPC (ACBS bit 4 clear, ~40% of the census) seeds its authoredDATASPECIAL (NpcRecord::data_attributes) instead of the classATTR, shells fall back to the class (#5338,4957536ba); PLDT decode (parse_rate_fnv_pack_pldt_location);PKDDcarries the topic (offset 4) and the Dialogue Type (PackRecord::dialogue_type, 0 Conversation / 1 Say To, #5376) as the u32 at offset 16 — byte 0 is the low byte of the FOV float, so the old read left the Say-To decline dead (#5492,dae08000d;pkdd_dialogue_type_is_the_u32_at_offset_16, floorparse_rate_fo3_fnv_pkdd_say_to_floor: FO3 19 / FNV 21 Say-To packages). - DIAL overrides fold INFO children (#5375,
168b81322):EsmIndex::merge_fromtakes an override's topic header but folds its INFOs by FormID in one batched pass per override (fold_infos_into_topic— same id replaces in place, a new one inserts after itsPNAMpredecessor; the per-INFO rescan it replaced was O(infos x master) per topic, #5644,0c2bd4d6d, pinned against the cfg(test) one-at-a-time reference bybatched_info_fold_matches_the_one_at_a_time_fold); a Deleted-INFO tombstone prunes one line, a DIAL tombstone drops the topic. The old whole-DialRecordlast-write-wins let every FNV story DLC gutGREETING. An override'sPNAM == 0run composes in authored file order through one per-override contribution cursor — the first contribution goes to the front, each later head lands after the previous one (#5494,5356c8780;dialogue_override_head_run_composes_in_file_order; before it The Pitt's unconditional "Go away." head won over 92 conditioned greetings); the master-relative position of the head run is an unsourced engine choice.generic_greeting_formis resolved once at merge end (#5426,411d0eeaf). Guards are two-plugin fixtures (dialogue_override_folds_infos_into_the_master_topic,dialogue_override_without_children_keeps_master_infos,merge_resolves_the_generic_greeting_form_once, allcrates/plugin/src/esm/records/index.rs); the real-data floordialogue_greeting_and_forcegreet_fnv_floorparsesFalloutNV.esmalone, so no test measuresGREETINGunder a DLC load order. - ARMO
DNAMisAR(DR x 100, s16), 2 unused,DTf32, flags on FNV and onlyAR+ flags (4 bytes) on FO3 — the decode once read DR as DT and the DT float as DR; New Vegas Damage Threshold composes from it (52b59e43d;fo3_armo_dnam_is_damage_resistance_only, real-datafallout_armor_damage_threshold_and_resistance_decode— Legate armor DT 15, Reinforced Combat Armor Mk II DT 20,--ignored). CELLXCCMis a CLMT on TES4/FO3/FNV (CellData::climate_override) and a REGN only on TES5/FO4 (sky_region) — an FNV cell must still populateclimate_override(#5463,3b28dca71;parse_cell_oblivion_fo3nv_xccm_populates_climate_override). - Authored corpses (mechanism
/audit-gameplay): the FO3/FNV marker is the base'sDATAhealth <= 0 —XRGDis pose-only and ACBS bit 23 is not a marker (#5005,de6bdb381;fnv_corpses_key_on_base_health_not_xrgd) — theXRGDpose applier (byroredux/src/ragdoll_pose.rs,18b3d87a7, #5015 still open) is pinned to Skyrim's 18-body humanoid skeleton and refuses any other, so FNV corpses are outside it and keep collapsing from their idle pose — plus the kill-on-load script idiom (dismember-triggerXLKRtargets and self-killing bases) recognised at load because no FO3/FNV object script runs (#5223,717f39a82;script_killed_corpse_forms,fo3_fnv_script_killed_corpses_match_the_measured_census, FNV 10 + 2). The set is computed once per load order over every cell, so exterior trigger -> persistent-target links across separateload_references_budgetedcalls are not missed (#5248,d4e8c31be); it matches only the exact shippedGenericBiped*DismembermentSCRIPTEDIDs and requires the winning SCPT to resolve to a vanilla master, so name-alike or override scripts are declined (#5304,2d47bf7f1) — "winning" is theLoadOrderper-SCPT last-writer table (script_is_vanillainreference_state.rs), because a true override keeps the master's FormID and slot byte (#5428,335a0179c;kill_on_load_recognition_declines_a_true_override_of_a_vanilla_script); the whole-load-order scan returns empty on every game but FO3/FNV (#5450,eaac75911). FO3/FNVXLKRis 4 bytes (target only), not Skyrim's 8 — alen >= 8gate drops every link. - SCOL is FNV-era (#1538):
is_scol_eraincrates/plugin/src/esm/records/parse.rsmust keep dispatchingparse_scol_groupforFallout3NV; re-narrowing it to FO4-only silently drops 1 084 placements. MOVS/PKIN/MSWP are FO4+-only and must not take FNV dispatch. Anunreachable_patternswarning inesm/cell/walkers.rsis a smell. - SCPT
SCHRis a 20-byte header with au16flags tail on Oblivion/FO3/FNV (#1654):ScriptRecord.flagsis read viau16_or_defaultinrecords/script.rs; au32read fails every real script and pins flags to 0. Guard:parse_scpt_extracts_schr_scda_sctx_and_vars+ the real-data script counts. - LVLI flattening:
expand_leveled_form_id/expand_leveled_loot(equip.rs) — NPC outfits and container loot must resolve to base items, not empty. NPCCNTOcarry lists expand throughexpand_leveled_lootwith LVLO counts (#4696) at the TPLT terminal's level, not the shell's (#4812; 643 FNV shells differ). Guards:fnv_leveled_item_multi_pick_semantics_are_pinned_on_the_shipped_master,equip.rsexpand_leveled_*tests,cnto_leveled_counts_match_the_container_path(byroredux/src/npc_spawn/tests.rs). Output:/tmp/audit/fnv/dim_2.md
Dimension 3: NIF / NIFAL Slice — the Reference Realization
Subagent: legacy-specialist
Routing: block decode -> /audit-nif; the single-boundary / no-fabrication / no-render-time-fallback rules and collision/particle translation -> /audit-nifal; the Disney-BSDF gate (MAT_FLAG_PBR_BSDF must be 0 — FNV authors no BGSM/BGEM) -> /audit-renderer.
Paths: crates/nif/src/blocks/, crates/nif/src/import/, byroredux/src/material_translate.rs, crates/nif/tests/parse_real_nifs.rs, crates/nif/tests/per_block_baselines.rs
First step: cargo test -p byroredux-nif --release --test parse_real_nifs --test per_block_baselines --test block_coverage_baselines -- --ignored fallout_nv real_archive_torch (real-data lane; plain cargo test never runs it).
- Parse rate and per-block histogram hold vs
fallout_nv.tsv/ ROADMAP; a histogram shift = a mis-dispatched block. - FNV legacy emissive is
EmissiveSource::Material(emissive_source_tests.rs); Skyrim/FO4 variants must not bleed in. - FNV must place on the post-Oblivion side of every
bsvergate (bsver::FO3_FNV= 34);examine_collision_kindclassifies FNV chainsCollisionAuthoring::Classic;havok_motion_typemaps BOX_INERTIA (4) to Dynamic (havok_motion_type_maps_full_enum). - Emitter birth rate reaches the ECS from the authored controller chain, per emitter instance: the per-game rate floor
real_archive_torch_meshes_surface_particle_emitters(--ignored) must be green for FNV. It was red on main 2026-09-12..19 (#4467) because the fix session ran only the default lane — any change undercrates/nif/src/import/walk/needs this lane run. MAX_NIF_NODE_DEPTH(128) never trips on a legit FNV scene (crates/nif/src/import/walk/tests.rs); since #5485 (cf8730adc) all five scene-graph walkers share one per-walkrevisit_guard(visited bitset + the depth cap), which must skip nothing on vanilla FNV trees (no multi-parent or self-referenced children ship) — a node or emitter count drop after that change is the regression. Output:/tmp/audit/fnv/dim_3.md
Dimension 4: Animation, Skinning & PHYSAL Ragdoll (FNV reference slice)
Subagent: legacy-specialist
Routing: the solver end (collider translation, fixed-step, build_ragdoll, controller) -> /audit-physics; clip registry / lock shape -> /audit-ecs. This dimension owns the source axis: does FNV's authored bhk chain reach the canonical spec intact.
Paths: crates/nif/src/anim/, crates/nif/src/import/collision/, byroredux/src/ragdoll.rs, byroredux/src/anim_convert.rs, byroredux/src/npc_spawn.rs, byroredux/src/npc_spawn/seam_blend.rs, docs/engine/physal.md
First step: cargo test -p byroredux-nif --release --test ragdoll_import -- --ignored fnv_ and docs/smoke-tests/m41-ragdoll.sh.
- Classic-era guards, verified on FNV data (FO3 re-verifies on its own): B-spline pose fallback gated on the
FLT_MAXsentinel (crates/nif/src/anim/bspline.rs; B-splines are reachable on FNV/FO3); since #5486 (0c4d4af08) resampling is clamped to the owning sequence's span (only a finite, forward span clamps — #5575; the curve parameter still maps over the interpolator's own span, the clamp only picks which times are emitted — #5572) and bounded byBSPLINE_MAX_SAMPLES_PER_CHANNELplus oneBSPLINE_IMPORT_KEY_BUDGETperimport_kfpass — a declined-channel count logged once per import (#5577, static-pose fallback) on a vanilla FNV clip is a regression; clip registry dedup by lowercased path (get_or_insert_by_path_dedupes_repeated_calls); NPC hand meshes (lefthand.nif/righthand.nif, theFallout3NVarm of the body table — Oblivion has its own four-part table since #5487,1b45763fa) load besideupperbody.nifon kf-era NPCs (byroredux/src/npc_spawn.rs) — bodies with no hands are the regression. - Ragdoll:
template_from_imported/extract_ragdollwarn on dropped bodies/constraints rather than silently shrinking; FNV's dominant constraint is abhkMalleableConstraintwrapping a Ragdoll (docs/engine/physal.md§ FO3/FNV) and must yield a jointed body. Real-data guard:fnv_protectron_skeleton_is_one_connected_component(crates/nif/tests/ragdoll_import.rs).bhkBallAndSocketConstraint/bhkStiffSpringConstraint/ the ball-socket chain are decoded (#4212) butextract_ragdollwarns and drops them (no canonical joint kind) — a sole-link drop detaches a limb; no FNV occupancy census exists (#3792, closed, only covered the four decoded types;breakable_wrapped_ball_and_socket_still_dropspins the rest), so measure before assuming there is no FNV example. Writeback must not corrupt the skinned palette (byroredux/src/ragdoll_installed_tests.rs). Solver explosion containment (velocity clamp -> park -> articulation detach, #51615ae7f8ad4, #5246e8de9f8c8) is/audit-physics; its killer repro is FNVSLscorpionBurrowINT— a multi-SAP panic there is a regression. - No per-game branch in
ragdoll.rsor the solver bridge — the only per-game seam is the constraint CInfo decode. - Spawn-time skin seam blend (
seam_blend.rs, Oblivion/FO3/FNV only; mechanism/audit-nifal,/audit-gameplay): a head/hand part's open-edge vertices match skin neighbours (is_skin_texture— texture undertextures\characters\) withinSEAM_MATCH_RADIUS, take their normals, and bake a tone ratio into vertex colour fading overSEAM_FADE_DISTANCE(both engine tuning, set by eye on FO3). It must touch only the part being spawned, never the cached body/outfit import; blending into collars/sleeves is the regression. Output:/tmp/audit/fnv/dim_4.md
Dimension 5: Ambient AI, Dialogue, Consumables & HUD — FNV Data Through Gameplay Mechanisms
Subagent: general-purpose
Routing: procedure runtimes, package selection, seat reservation, CTDA fail-open, consumable/restoration/loot mechanics, HUD driver -> /audit-gameplay; MenuXml eval/layout/raster -> /audit-ui, parse side -> /audit-parsers; character formulas -> /audit-character. Check here only what FNV authors.
Paths: byroredux/src/npc_spawn.rs, byroredux/src/boot/schedule/post_update.rs, byroredux/src/player_body.rs, byroredux/src/systems/{npc_dialogue,forcegreet,dialogue_voice,eat_sleep}.rs, crates/scripting/src/dialogue.rs, byroredux/src/hud.rs, byroredux/src/inventory.rs, crates/menuxml/src/profile.rs, docs/engine/npc-spawn-ai-packages.md, docs/engine/dialogue-trees.md, docs/engine/playable-vertical-slice.md
First step: git log --since=<date> --format='%h %cs %s' -- byroredux/src/npc_spawn byroredux/src/systems/npc_dialogue.rs byroredux/src/systems/forcegreet.rs byroredux/src/systems/dialogue_voice.rs byroredux/src/systems/eat_sleep.rs crates/scripting/src/dialogue.rs byroredux/src/hud.rs byroredux/src/inventory.rs crates/menuxml
- Ambient locomotion is default-on (M42.10): sandbox seat, Wander/Travel/Follow/Escort/Guard/Patrol, Eat/Sleep and walk playback register unconditionally behind the single
BYRO_NO_AI_LOCOMOTION=1kill-switch; the seven olderBYRO_*opt-in variables are not read. Guard:ambient_locomotion_default_on_testsinbyroredux/src/boot/schedule/mod.rs. A finding that "NPCs walk without an opt-in" is a false premise. - Walk clips are FNV assets:
humanoid_walk_kf_pathresolveslocomotion\{male,female,child}\mtforward.kfundermeshes\characters\_male\per(gender, is_child), child gated on the RACE child flag;walk_speed_forderives per-actor speed from the clip's authored stride, sane range [30, 250] u/s, fallbackLOCOMOTION_WALK_SPEED. Confirm on real FNV NPCs that female/child actors get their own clip and a measurable stride. - Slice features landed Skyrim-first — check FNV reach, do not assume it: ambient faction hostility starts and disengages combat and suspends the ambient package (#4414, #4816, #4703; FNV's
p2-melee-coretarget is GSSettlerCM00104F08— GSTrudy is authored Initially Disabled, #5156); the player body's kf arm reuseshumanoid_walk_kf_path(kf_capsule_resolves_gendered_walk_and_shared_idle_from_the_registry) butp3-player-body.shis Skyrim-only. - Dialogue layers (mechanism
/audit-gameplayDim 2,/audit-scriptingDim 5; specdocs/engine/dialogue-trees.md):npc_dialogue.rsbinds topics through running-quest alias bindings (running_quests_binding_entity) and FNVQUSTauthors noALST/ALLS, so FNV rides the FO3/FNV layers of #5367 (closed, all phases landed — G/L/F14cff35ae, voicef8950e7cc).open_conversationfalls back to the genericGREETINGDIAL for a quest-less NPC (Doc Mitchell), read fromEsmIndex::generic_greeting_formand borrowed rather than cloned (#5426,411d0eeaf).select_infohonours each INFO's owning quest viaQSTI+ quest priority (#5271,dbc07e8f0) and gates each candidate through its quest's ownQUSTconditions first (DialogueQuestConditions, #5734,6709eb65e; fail-closed — a gate on an uncatalogued function such asGetIsVoiceTypedeclines the line instead of letting the top-priority quest's unconditioned greeting hijack every speaker it outranks, FNV's ED-E beeps; the guard is released before evaluation so it never nests withQuestStageState,8e4c6e40a) and the authored positional Random stack — a passing Random first INFO rolls among the immediately following passing Random INFOs, ended by the next passing non-Random or a Random End INFO (#5397,0436bea5c); Say-Once INFOs are ledgered per speaker as(speaker ref, INFO)pairs in the savedDialogueSpokenInfoForms(#5300,f18224b02), and re-selecting the same INFO fires its OnEnd before the next OnBegin. Force-greet (byroredux/src/systems/forcegreet.rs) takes the Dialogue-procedure PACK'sPKDDtopic, walks the cached NAVM path and opens in place once held against an obstacle (#5452,6316719ed), and its walk step honoursBYRO_NO_AI_LOCOMOTION(#5430,bd366e300); the ambient arm installs only when the package's conditions are fully modeled (no fail-open pass),PTDTtargets the player (0x14) or nothing, and the Dialogue Type is Conversation, and a failed open consumes the directive (#5376,4e58f241d;dialogue_ambient_install_declines_unmodeled_offtarget_sayto) — consoledialogue.forcegreetstill installs any Dialogue package. Selection skips a Dialogue package whose pass was manufactured by fail-open (any uncatalogued CTDA function) and continues to the next eligible package, so a declined one no longer starves the Sandbox/Travel/Eat/Sleep packages scheduled below it — 56 FNV NPC bases stood at spawn around the clock before (#5499,f7ca4a60f; two-package pin inbyroredux/src/npc_spawn/ai_package.rs). A dead player, or a conversation open with another NPC, holds the directive — re-read per open, so a second same-frame greeter holds rather than stripping the first's line (#5392,16544d4c9; #5642,c0c9c9d1b;dead_player_holds_the_forcegreet_directive,open_conversation_holds_or_consumes_the_forcegreet_directive). Gate:docs/smoke-tests/dt1-dialogue-layers.sh. Decoded data: INFODATAtype/flags (#4469,cc9353043) and the DIALTop-levelflag that keeps choice-only topics link-only (#5224,305363122). - Dialogue voice (
byroredux/src/systems/dialogue_voice.rs; playback mechanism/audit-audio):Fallout - Voices1.bsarides the FNV sounds profile. The path issound\voice\<owning plugin>\<VTYP EDID>\<quest>_<topic>_<local id>_<response n>.ogg— owner throughGlobalFormIdResolver, since masters own the low slots (#5393), quest EDID cut toVOICE_QUEST_CHARSand the pair toVOICE_NAME_CHARSonly when quest + topic exceed 25 (a length test, one candidate — #5521), id plugin-local,<n>the authored response number (#5395; both5b68792b7;voice_path_candidates_truncate_only_over_the_length_limit,voice_path_candidates_strip_the_load_order_byte,voice_owner_resolves_masters_before_the_esm). FNV DLC voice ships in each DLC'sMain.bsa, which no profile mounts (pass--sounds-bsa), so unvoiced DLC lines under the default profile are expected, not a finding. Decoded PCM rides the byte-budgetedVoiceSoundCacheLRU (#5382,8410ad1e5) and segments follow the speaker (#5410,d1a7ee8c6); a topic change or conversation close cuts the playing line (#5432,40b77828b). - Eat / Sleep (FO3/FNV
PKDTprocedures 3 / 4,byroredux/src/systems/eat_sleep.rs; mechanism/audit-gameplayDim 5): walk once to thePLDTanchor (EatSleepLocation— NearReference at the reference; NearLinkedReference at the actor's ownXLKRtarget throughPackageTargetRegistry::linked_reference; NearEditorLocation at the spawn-stampedEditorPlacement; InCell spans the seat search over the whole resident cell (every FNV In-Cell package authors radius 0); the rest stay put — #5391,42aab4c09, #5500,bcaf63aa8. An unresolved reference or non-resident cell resolves toNoneand retries onANCHOR_RETRY_SECS, never cached as the actor's position — 163 FNV actor/target pairs place the target after the actor; arrived actors that cannot seat retry onSEAT_RETRY_SECS— #5527, #5449; the walk uses the cached NAVM path and attempts the seat once wall-held — #5452), then seat through the sandbox path. FNV furniture markers authoranimation_type0, soFurnitureMarkerKind::Sleepnever resolves and every FNV sleeper takes the nearest sit marker — chairs included, and an Eat actor can take a bed's: the documented v0 contract, not a bug (#5390,9bdfdd1c6;legacy_sleep_actor_seats_at_the_sit_fallback). The per-frame actor gather lives in persistentEatSleepScratch, seated actors skipped at the gather and the retry maps pruned against a reused membership set (#5707,a08156579). Gate:docs/smoke-tests/m42-eat-sleep.sh(Prospector settler,time.set 23): it asserts the selection leg (SleepBehaviorhanded over) and an idle leg — the settler's Sleep package is In-Cell for GSHouseInterior02, not the loaded saloon, so he must neither walk nor carrySeated(#5391); the seat leg is unit-gated only, since no NPC in that cell has a resident-cell Eat/Sleep package (5f205f0ca, which replaced the #5427 seat assertion that only held while an unresolvable anchor froze the actor in place). Creatures never take furniture: theCreatureActormarker (stamped inprepare_creature_state) gates both seat paths, so Sandbox's wander/idle and Eat/Sleep's walk stay but no CREA is seated — 59 FNV placements across 14 cells were frozen in furniture before (#5495,9bb8bc475;a_creature_actor_never_takes_furniture). A seated actor restored at a stream boundary re-runs the seating write path (parked sit pose, heading,SeatReservationsre-claim) or drops the Seated restore for its package to re-seat (#5501,b1fed839c). The docs no longer call Eat/Sleep/Dialogue parse-only (#5471,3bb9748f0). - Consumables / Hardcore (mechanism:
/audit-gameplayDim 3): FNV's eligible plans per the spec (docs/engine/playable-vertical-slice.md§ P3) are Stimpak (00015169), Blood Pack, Bitter Drink.IsHardcore(CTDA 586) selects the savedHardcoreModeflag (crates/core/src/ecs/resources/hardcore.rs); hunger/thirst/sleep/ammo weight/companion death are documented as unbuilt (that doc, re-read 2026-09-29). Real-master tests (--ignored): Stimpakreal_stimpaks_restore_scaled_health_and_limbs_but_hardcore_only_health(byroredux/src/inventory.rs, needs FO3 + FNV) andreal_stimpaks_survive_disk_overlay_in_normal_and_hardcore_modes; Blood Pack + Bitter Drinkreal_new_vegas_timed_restoratives_survive_disk_overlay(bothbyroredux/src/save_io/consumable_tests.rs). - HUD profile (
HudGameProfile::fallout_nv): assembled style (meters grafted frommenus\prefabs\meter.xml, compass fromtemplate_compass_window); 2 bars keyed on AVIF editor idsHealth/ActionPoints, resolved per load throughPlayerVitalsand read from the player only, with the bar fraction composed throughActorValue::undamagedso a routedSetBaseoverride reads back (#5508,627149b62; theHudBar/bar_fractionsdocs now state the editor-id ->PlayerVitals->PlayerEntitypath, #5033,468c66142) (#4675 — the old literal0x2C9/0x2D0werefallout.rstest-fixture ids and never matched real content); 9 font slots (FO3 has 8) fromTextures2, which rides in as the numeric sibling of theFallout - Textures.bsaanchor; menu XML fromFallout - Misc.bsa. FO3 vs FNV is decided by the load order (fallout_profile: a base ESM among--master/--esm, else the one beside the corpus — #4718; the old--esm-name match gave DLC launches the FO3 profile). Guards:profiles_pin_corpus_facts(crates/menuxml/src/tests.rs),fallout_profile_follows_the_load_order_not_the_esm_name(hud.rs),fnv_corpus_facts(crates/menuxml/tests/fnv_corpus.rs,BYROREDUX_FNV_DATA; the corpus file also pins a measuredtextures\interface\DDS census, 1,767 entries split across both texture archives, #5669,065c9d31d), smokedocs/smoke-tests/m48-5-fnv-hud.sh(DLC launch shape; exits 77 on missing data and sits in the contract checker's HUD loop since #5276,c47b2d72d). Output:/tmp/audit/fnv/dim_5.md
Dimension 6: Real-Data Validation, Bench-of-Record & Smoke Gates
Subagent: general-purpose
Routing: renderer correctness of RT lighting / denoise / sky on FNV scenes -> /audit-renderer, /audit-exterior; runtime telemetry diff -> /audit-runtime --game fnv.
Paths: assets/debug_profiles.toml, byroredux/src/game_profiles.rs, scripts/fsr-bench-matrix.sh, docs/smoke-tests/, .claude/audit-baselines/runtime/
First step: git log --since=<date> --format='%h %cs %s' -- scripts/fsr-bench-matrix.sh docs/smoke-tests assets/debug_profiles.toml
- Use
--game fnvfor anything not the bench-of-record (#3346): it expands to absolute--esm/--bsa/--textures-bsapaths, so CWD cannot break it. A vanillaData/has no bareMeshes.bsa(Fallout - Meshes.bsa;--bsaopens the literal path) and a bare-name run from the wrong CWD loads ~36 entities with a spurious FPS. - Bench-of-record:
scripts/fsr-bench-matrix.sh 3 300(encodes archives, CWD, upscaler sweep and the #3347 sanity gates), or single-configcargo run --release -- --game fnv --cell GSProspectorSaloonInterior --upscaler taa --bench-frames 300 --bench-holdthenbyro-dbg(port 9876)stats.--upscaler taais mandatory for comparison: with no flag the run usesfsr3/qualityor a persistedrender.upscalerfrom the settings file (BYROREDUX_SETTINGS_PATH, else~/.config/byroredux/settings.toml—discover_settings_pathincrates/settings-io/src/lib.rs; theRenderer upscaler selection: … (source: …)boot line and the bench line'supscaler=token name which, #4947), and comparing FSR-Quality FPS to the ROADMAP TAA-native headline reads as a fake ~75% win (#2560). Compare entity/draw/FPS/fence to the ROADMAP FNV row at its recorded commit; the pre-collider baseline was never recovered, so read ROADMAP Known Issues before flagging fence/FPS. - Chrome/posterized surfaces: run
tex.missingfirst (Update.bsa+Fallout - Textures2.bsasplit the texture set). The committed v104 real-data guard isfnv_meshes_bsa_v104_extracts_nif_with_gamebryo_magic(crates/bsa/tests/bsa_real.rs,--ignored); reader discipline is/audit-parsers. - Playable-slice gates on FNV (
docs/smoke-tests/README.md):p0-door-interaction.sh fnv,p1-character-traversal.sh fnv,p2-melee-core.sh fnv(GSSettlerCM kill — Health 45.0 on the authored NPC curve, 18 ragdoll bodies; FNV hits now lose the target's Damage Threshold incombat_damage_system, so the gate checks each swing's applied damage is positive, consistent and <= the incoming loadout damage, not equal to it —dbe562c1f,52b59e43d),p5-save-restart.sh fnv,dt1-dialogue-layers.sh,m42-eat-sleep.sh,p5-f5-f9-quicksave.sh fnv,p5-door-transition.sh fnv,p5-soak.sh fnv,w1-water-traversal.sh fnv(real capsule Lake Mead shore -> swim -> dive -> surface -> shore -> cell boundary),m-exteriors.sh fnv. Missing data is exit 77, never a pass —scripts/check-playable-smoke-contracts.shenforces it, anddt1-dialogue-layers.sh/m42-eat-sleep.shjoined its loops only in #5427 (6a72c6042), so a new FNV gate absent from the checker is a finding. - Look baseline: the Prospector saloon overexposure (#5158) closed on the
7d99ba7f0exposure-envelope retune, and3bcf6c8e8(#5482) moved the IMGS/IMAD contrast grade after exposure with a shadow toe for every game, FNV included — compare FNV captures against post-3bcf6c8e8frames; the grade itself is/audit-renderer. Output:/tmp/audit/fnv/dim_6.md
Phase 3: Merge
- Read all
/tmp/audit/fnv/dim_*.md. - Combine into
docs/audits/AUDIT_FNV_<TODAY>.md:- Executive Summary — FNV is the baseline; any regression against the ROADMAP-recorded numbers is at least HIGH (CRITICAL if it breaks a shipped foundation).
- Dimension Findings — grouped by severity per dimension.
- Baseline Comparison Table — ROADMAP number vs observed for entity count, draw count, FPS, fence, parse rate, record count (cite the ROADMAP commit compared against).
- Regression Guard List — previously-fixed issues verified still correct.
- Remove cross-dimension duplicates.
Suggest: /audit-publish docs/audits/AUDIT_FNV_<TODAY>.md
(label every finding game:fnv + legacy-compat, plus its own domain label.)
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/fallout-new-vegas-compatibility-audit-mvg6ty29/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/fallout-new-vegas-compatibility-audit-mvg6ty29' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/fallout-new-vegas-compatibility-audit-mvg6ty29/download' --output '.skill-downloads/fallout-new-vegas-compatibility-audit-mvg6ty29/SKILL.md.part' && mv '.skill-downloads/fallout-new-vegas-compatibility-audit-mvg6ty29/SKILL.md.part' '.skill-downloads/fallout-new-vegas-compatibility-audit-mvg6ty29/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.
Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/fallout-new-vegas-compatibility-audit-mvg6ty29/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
ClickHouse Performance Comparison
Testing
Evaluate ClickHouse performance test results, check PR performance changes, compare with history, and assess whether a result is actionable.
Analyze CI Performance Reports
Testing
Analyze CI performance comparison reports for a ClickHouse PR. Cross-references master history to distinguish real regressions from flaky tests.
Santa Method
Testing
Multi-agent adversarial verification with two independent reviewers. Output is checked twice and iteratively fixed until both pass before shipping.