Skip to content

Install CurseForge dependencies atomically and fail closed on setup errors #46

Description

@Exohayvan

Summary

The live tester deletes existing dependency JARs before replacement downloads are safely installed, then catches installation failures and continues toward launcher testing.

Evidence

  • common/scripts/curseforge_testing.py:2271-2284 treats dependency resolution failure as a warning.
  • Lines 2294-2299 remove existing dependency files before downloading directly to the final path.
  • Lines 2355-2363 catch installation exceptions and return normally.
  • The plan can then be considered ready for launcher testing despite missing or truncated dependencies.

Impact

A working CurseForge profile can be damaged, and setup failures are misreported as Minecraft/mod runtime failures instead of stopping at the correct stage.

Reproduction / verification

  • Inject resolution, disk-full, interrupted-download, checksum, and rename failures.
  • Verify the prior dependency survives byte-for-byte and the affected instance is marked setup-failed.

Proposed direction

Download to a temporary file, verify advertised digest and size, flush, atomically replace the old JAR, and propagate per-instance installation failures so launcher testing cannot continue.

Acceptance criteria

  • Failed installation never removes the previous valid dependency.
  • Partial files are never exposed under the final JAR name.
  • Resolution/install failures fail the affected plan closed.
  • Tests cover every destructive boundary.

Audit provenance

Candidate #20 from the read-only repository audit performed on 2026-07-20. This is separate from existing issues #3, #4, #25, and #27 unless explicitly linked later.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Medium: normal functional defect or important work with a workaroundarea:testingAutomated tests, fixtures, and validation infrastructureloader:commonShared Common implementation or assetsstatus:backlogValid work that is not currently scheduledtype:bugA defect or incorrect behavior

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions