feat: HellDrinx takeaways — conflict blocklist + vehicle path signal

Two narrow additions adopted from a review of HellDrinx Mod Manager
(/tmp/helldrinx-modmanager-PZ-main.zip), per
docs/plans/ (planning conversation, no spec checked in).

A. _IGNORED_FILENAMES in api/diagnostics.py — skip filenames that are
   intended merge points (PZ engine-concatenated or framework hooks)
   from /api/conflicts output. Multiple distinct sha1s for these files
   is by-design, not a conflict. Live cache had 33 providers shipping
   sandbox-options.txt with 31 distinct hashes — those would have been
   31 false-positive conflict rows on any sort spanning them.

B. Path-based Vehicles signal in worker.build_manifest_and_types —
   extended the existing scripts/vehicles[/] check with
   models_x/vehicles/ and models/vehicles/. Catches vehicle mods that
   ship 3D assets without scripts (rare but real); still requires the
   user-build's manifest to be rebuilt before mod_types reflects it.
This commit is contained in:
2026-05-06 19:20:29 +00:00
parent f8b48fbacb
commit b1471b739f
2 changed files with 38 additions and 2 deletions

View File

@@ -431,7 +431,13 @@ def build_manifest_and_types(
or suffix in {".png", ".dds"}):
if path.name.lower() != "poster.png":
tags.add("Textures")
if rel_below.startswith(("scripts/vehicles/", "scripts/vehicle")):
# Path-based vehicle detection. scripts/vehicles is the universal
# signal; models[_x]/vehicles/ catches mods that ship 3D assets
# without scripts (rarer, but real — borrowed from HellDrinx Mod
# Manager's heuristic). rel_below is already lowercased so the
# capital "X" in the original PZ "models_X" path lands as "models_x".
if rel_below.startswith(("scripts/vehicles/", "scripts/vehicle",
"models_x/vehicles/", "models/vehicles/")):
tags.add("Vehicles")
if rel_below.startswith(("clothing/", "scripts/clothing/")):
tags.add("Clothing")