RELEASE
planning/2.8.5/audits/FO3/AUDIT_fo3_weapons.md
sha256 d9567828c3c989cd · 9078 bytes ·
original held in the private archive
# Independent Audit — FO3 Weapon-Stats Correction (commit `3961842`)
**Auditor:** Opus (Protocol 8 Stage 3, independent).
**Method:** started from the raw diff and the **live fallout.wiki**, not the implementer's report or plan numbers. Re-verified a sample of values by hand on the wiki, reproduced the guard red-then-green myself, and diffed the old-vs-new weapon list.
**Date:** 2026-07-15. **Branch:** dev.
---
## VERDICT: ✅ PASS (with 3 non-blocking follow-ups — see bottom)
The corrected values are right, the four deletions are correct and complete in the two target files, nothing real was over-deleted, the guard is real (I broke it and watched 5 tests fail by name, then restored to green), the range bands are sane, New Vegas is untouched, and no existing test was weakened. There is **one genuine gap worth a small follow-up** — the fire-rate (Attacks_Per_Second) on a handful of explosives was left at the old estimated numbers, not the wiki's — but it is a *pre-existing, uncorrected* value on a loosely-used field, not a wrong new correction, so it does not send the commit back to Stage 2.
---
## 1. Do the corrected values match the live wiki? — YES
I looked up each of these on fallout.wiki myself and checked every field the diff changed (damage, crit damage, crit multiplier, fire-rate, weight, value). **Every one matched exactly**, across every weapon category:
| Weapon | Category | Wiki vs code |
| --- | --- | --- |
| 10mm Pistol | small gun | 9 / 9 / 1 / **fire-rate 6** / 3 / 225 ✅ (implementer's named example — correct) |
| Sniper Rifle | small gun | 40 / 40 / 5 / 1.0714 / 10 / **value 300** ✅ (named example — correct) |
| Assault Rifle | small gun | 8 / 8 / 1 / 8 / 7 / 300 ✅ |
| Combat Shotgun | shotgun | 55 / 27 / 1 / 1.5 / 7 / 200 ✅ |
| Hunting Rifle | small gun | 25 / 25 / 1 / 0.75 / 6 / 150 ✅ |
| Laser Rifle | energy | 23 / 22 / 1.5 / 2.0455 / 8 / 1000 ✅ |
| Plasma Rifle | energy | 45 / 44 / 2 / 2 / 8 / 1799 ✅ |
| Gatling Laser | big gun | 8 / 6 / 1 / 20 / 18 / 2000 ✅ |
| Minigun | big gun | 5 / 0 / 0 / 20 / 18 / 1000 ✅ |
| Gauss Rifle | energy (unique) | 100 / 50 / 5 / 1.0714 / 12 / 500 ✅ |
| Alien Blaster | energy (unique) | 100 / 100 / 100 / 3 / 2 / 500 ✅ (crit ×100 correct) |
| Super Sledge | melee | 25 / 25 / 1 / 1.4286 / 20 / 180 ✅ |
| Shishkebab | melee | 35 / 24 / 2 / 2.3077 / 3 / 200 ✅ |
| Power Fist | unarmed | 20 / 20 / 1 / 1.0909 / 6 / 100 ✅ |
| Deathclaw Gauntlet | unarmed | 20 / 30 / 5 / 1.6304 / 10 / 150 ✅ |
**Explosives (blast damage pulled from each weapon's own page — the master table lists impact = 1):**
| Explosive | Wiki blast | Code | |
| --- | --- | --- | --- |
| Frag Grenade | 100 | 100 | ✅ |
| Fat Man | 1600 | 1600 | ✅ |
| Experimental MIRV | 12800 (8 mini-nukes) | 12800 | ✅ |
| Missile Launcher | 150 | 150 | ✅ |
| Miss Launcher | 200 | 200 | ✅ |
The old→new diff confirms the implementer's "errors in both directions" claim (e.g. 10mm value 100→225 up, Sniper value 3500→300 down, 10mm fire-rate 1.7→6). **No corrected value I checked is wrong.**
---
## 2. The four deletions — correct and complete, nothing over-deleted — YES
- I diffed the full FO3 weapon-name list old-vs-new: **exactly four rows removed** (Bumper Sword, Golf Club, Plunger, Tin Grenade), **zero added, nothing else removed.** Count 115 → 111. Nothing real was collateral-deleted.
- All four are genuinely non-FO3: **Bumper Sword** and **Golf Club** are New Vegas weapons (and correctly still present in the NV data); **Plunger** and **Tin Grenade** don't exist in Fallout 3 at all.
- Gone from **both** files: removed from `db_fo3.js` WEAPONS.CSV **and** from the `reg_fo3.js` autocomplete registry. I confirmed the half-deletion guard is real — when I re-added Bumper Sword to only the DB, the existing DB↔registry parity test failed with "missing: Bumper Sword."
**One loose end (cosmetic, not a live bug):** a leftover `RECIPES.CSV` row — the fabricated "Abraxo Cleaner Bomb" recipe — still lists "1 Tin Grenade" as its output. However, that whole RECIPES.CSV table is already flagged in the file header as **PARKED-FOR-REMOVAL with zero code consumers** (crafting reads `reg_fo3.js` recipes instead), so nothing reads this dangling reference. Worth sweeping in a future cleanup; not a defect in this commit.
---
## 3. The guard — real, red-then-green reproduced by me — YES
Suite 232 (10 tests) is a real guard, not a green-only decoration. I reproduced the red state independently: I injected **Sniper value 3500** and a resurrected **Bumper Sword** row into the *real* `db_fo3.js` and ran the suite. **5 tests failed, each naming the problem:**
- `232.1` golden-master — "Sniper Rifle Value expected 300 got 3500" + "Bumper Sword: UNPINNED extra weapon"
- `232.3` spot-check — flagged Sniper Rifle
- `232.5` deletions — "got 112 weapons, still-in-DB [Bumper Sword]"
- `232.8` range band — "Sniper Rifle Value=3500 outside [0,3000]"
- pre-existing DB↔registry parity — "missing: Bumper Sword"
I then restored the files and re-ran: **ALL 3258 TESTS PASSED.** So the guard catches the actual numbers (not just a citation label), catches resurrected bad rows, and catches half-deletions.
**Range-band sanity — does not false-trip on legit extremes:** the FO3 Base_Damage ceiling is deliberately 13,000 so the **Experimental MIRV's real 12,800** passes; the NV bands are grandfathered wide (value up to 100,000) so NV's genuine high values (e.g. Bozar 75,000, Marksman Carbine 5,000) don't false-trip. Both green. The band's real teeth are on Value/fire-rate/weight/crit, which is the right place for them.
---
## 4. Everything else
- **NV untouched:** `db_nv.js` and `reg_nv.js` are not in the diff. Test 232.10 independently confirms NV still has 192 weapons, keeps its own (legitimate) Bumper Sword/Golf Club, and keeps Marksman Carbine value 5000. ✅
- **Nothing weakened:** the test-file diff is **pure additions** — no existing assertion was deleted, relaxed, or edited to accept the old wrong values. No test anywhere pinned the old numbers (the suite is green after the data change with zero test-file modifications). ✅
- **Correct-then-cite (Protocol 3):** the false blanket "every data row sourced from fallout.wiki" header is genuinely gone, replaced with a dated (2026-07-15), honestly-scoped note that names the four removed rows and explicitly says the PARKED columns and other tables were **not** re-sourced. Guarded by 232.6. ✅
- **Protocol 14 (AI contract):** no consumed-field schema shifted — same six CSV columns, same order; the directive reads the CSV as raw text, so no schema break. ✅
- **Protocol 1 / 2 / 2a:** CACHE_NAME r34→r35, APP_VERSION stays 2.8.0 (pre-release on dev), test count 3248→3258 and 231→232 suites synced everywhere (no stale "3248" left in any doc). ✅
- **NV-inflation follow-up:** confirmed it is only a *note* in the commit message and the test comments (NV bands "should be tightened, out of scope"). **No NV data was changed** in this commit — the flag did not smuggle in an unaudited NV edit. ✅
- **Cleanup (Protocol 41):** working tree is clean after my red-test; no junk left behind.
---
## Follow-ups (non-blocking — for a future small pass, not a Stage-2 redo)
1. **Explosives' fire-rate (Attacks_Per_Second) is not wiki-accurate and is internally inconsistent.** The wiki lists **1.58** for all four nuke/missile launchers, but the code has **Fat Man 0.4** and **Missile Launcher 0.5**, while their siblings **MIRV and Miss Launcher are 1.579** (matching the wiki). Likewise the standard grenades/mines are a round **1.0** where the wiki is ~0.65 (thrown) / 0.33–0.5 (placed) — yet Cryo Grenade/Mine *do* carry the exact wiki 0.652/0.5. These APS values were **not changed by this commit** (byte-identical old→new), so they're an *uncorrected* legacy field rather than a wrong new value — but the commit's "re-verified all 6 fields row-by-row" wording slightly overstates the fire-rate accuracy for these ~6 explosive rows. Either correct them to the wiki numbers or document the deliberate "effective reload-limited rate" choice. Fire-rate is a consumed/displayed field, so this is a real (if minor) accuracy gap.
2. **Frag Grenade crit-multiplier:** wiki shows ×1, code sets 0 (the commit's "grenades can't crit" simplification, which the guard now enforces). Functionally inert — crit damage is 0 and the crit column is a PARKED field with no calculator — but strictly it diverges from the wiki value. Note only.
3. **Dangling `Tin Grenade` reference** in the fabricated "Abraxo Cleaner Bomb" RECIPES.CSV row (§2). That table is already PARKED-FOR-REMOVAL with zero consumers; fold into the eventual RECIPES.CSV deletion.
**Bottom line:** the corrections are accurate, the deletions are clean and complete, the guard genuinely guards, and NV is safe. The explosives' fire-rate is the one honest imperfection, and it's a small, scoped follow-up rather than a reason to reopen this commit. **PASS.**
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).