Add Check-Deps pre-flight (mods.toml ground truth) #9

Merged
Matt merged 1 commits from feature/check-deps-preflight into main 2026-05-23 11:55:39 +00:00
Owner

Pre-flight gate for Deploy-Brass.ps1 Stage=Pack: parses each lockfile jar's neoforge.mods.toml + jar-in-jar bundles, refuses to deploy if any required modId is missing. Would have prevented yesterday's Slice & Dice -> kotlinforforge crash. ~1.5s cached run.

Pre-flight gate for Deploy-Brass.ps1 Stage=Pack: parses each lockfile jar's neoforge.mods.toml + jar-in-jar bundles, refuses to deploy if any required modId is missing. Would have prevented yesterday's Slice & Dice -> kotlinforforge crash. ~1.5s cached run.
Matt added 1 commit 2026-05-23 11:55:38 +00:00
Adds scripts/Check-Deps.ps1 and wires it into Deploy-Brass.ps1 as a
pre-flight gate when Stage includes Pack. The script parses each lockfile
jar's META-INF/neoforge.mods.toml directly -- the same source the loader
reads at startup -- and refuses to deploy if any [[dependencies]] block
with type=required (default) names a modId that nobody in the pack
provides.

Handles three real edge cases discovered during initial run:

1. Jar-in-jar bundled deps: Create ships Ponder, Registrate, Flywheel
   embedded under META-INF/jarjar/. The script recurses into those and
   counts their modIds as present, since the loader auto-loads them.

2. Language-provider jars (Kotlin for Forge) have no standard mods.toml
   -- they declare via a different mechanism. Tiny slugToImplicitModId
   override map (currently 1 entry) covers them.

3. Non-mod lockfile entries (shaderpacks under shaderpacks/, configs
   under config/, etc.) are skipped explicitly by path prefix check.

Vanilla deps (minecraft, neoforge, forge, fabric, java, javafml, etc.)
are pre-seeded as present.

Jars cached at /tmp/bns-check-deps-cache/<sha1>.jar; second-run cost is
~1.5s. First run downloads ~150MB.

The script would have caught the v0.15.0 -> v0.15.1 incident: Slice &
Dice's jar declares kotlinforforge required in mods.toml even though
Modrinth's dep field only lists Create. The Modrinth-only check (earlier
draft) wouldn't have helped; the mods.toml-based check does.
Matt merged commit ce28a44e89 into main 2026-05-23 11:55:39 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: minecraft/brass-and-sigil#9