Skip to content

Compat fixtures: declarative exact runtime artifact transforms #86

Description

@swear01

Problem

Some audited optional-mod artifacts contain third-party @GameTestHolder classes. NeoForge discovers and classloads holders before namespace filtering, so an otherwise valid isolated fixture can fail when that unrelated test-only API is absent. Integrated Dynamics 1.33.3 is the current concrete case: its embedded integrateddynamicscompat class org/cyclops/integrateddynamicscompat/modcompat/refinedstorage/gametest/GameTestsAspectsRefinedStorage.class links Refined Storage test APIs.

The prior #51 branch used a one-off Integrated Dynamics Gradle strip task. That is not reusable and should not enter main.

Required behavior

  • Add a generic, descriptor/contract-owned fixture-runtime transform for exact ZIP entry removal.
  • Bind every transform to the exact dependency coordinate and pristine artifact SHA-256.
  • Require non-empty unique exact entry paths; reject traversal, directories, wildcards, absent entries, duplicate artifacts, and SHA drift.
  • Use pristine bytes for audit/compile/artifact verification; use transformed bytes only for isolated fixture and aggregate compatibility-matrix runtime classpaths.
  • Avoid target-specific conditionals or class names in shared Gradle/tooling.
  • Keep runtime dependencies non-transitive and prevent both pristine and transformed copies from being loaded together.
  • Make output deterministic and cacheable.
  • Generate the descriptor field from the reviewed Compat Kit contract; validate it in schemas, CLI, static tests, and docs.
  • Strict TDD and no silent fallback.

Acceptance

  • Synthetic descriptor/fixture tests prove exact removal, pristine SHA gating, missing-entry failure, traversal/wildcard rejection, and no duplicate runtime artifact.
  • Integrated Dynamics and Integrated Crafting fixtures use the declarative transform and load without Refined Storage.
  • Base build, Python suite, both isolated GameTests, and compatibility matrix stay green.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions