Skip to content

Add configurable Workshop dependency manifests#116

Merged
Python1320 merged 1 commit into
Metastruct:devfrom
ilker2445:dependency-manifest-final
Jun 15, 2026
Merged

Add configurable Workshop dependency manifests#116
Python1320 merged 1 commit into
Metastruct:devfrom
ilker2445:dependency-manifest-final

Conversation

@ilker2445

@ilker2445 ilker2445 commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add versioned dependency manifests that describe the Workshop dependencies selected for an outfit
  • let wearers review declared dependencies before wearing or sending an outfit
  • let every receiving client independently opt in and enforce the existing size limit across the outfit and selected dependencies
  • validate selected dependencies against the live Workshop graph before mounting them
  • preserve dependency selections across repeated choices and autowear

Motivation

The preliminary dependency mounting path recursively mounted every declared Workshop child. This could mount irrelevant dependencies and gave receiving clients no separate aggregate size policy.

This change keeps dependency mounting optional and makes the selected dependency set explicit. The wearer chooses which declared dependencies belong with the outfit, while each receiving client retains control over whether dependencies are mounted. The existing maximum download size now applies to the outfit and its selected dependencies together.

Behavior

  • dependency mounting is controlled by outfitter_allow_dependencies and defaults to enabled
  • outfitter_maxsize limits the combined size of the Workshop outfit and selected dependencies, and still accepts 0 as unlimited
  • Workshop outfit selection can open a dependency review dialog showing titles, IDs, hierarchy, availability, and sizes
  • the dependency review dialog uses an opaque background and explicit high-contrast text colors for readable normal, unavailable, and size-limit states
  • the dependency review button is disabled until a model is selected and the selected Workshop addon declares dependencies
  • unavailable dependencies remain visible for context but cannot be selected
  • users can accept selected dependencies, continue without dependencies, cancel, or increase their local maximum download size
  • selected manifests are normalized, deduplicated, versioned, and transmitted with the outfit
  • manifests are accepted only for Workshop outfits and validated against the root item's actual dependency graph
  • dependency graphs are bounded to 64 dependencies and 16 levels of depth
  • receiving clients mount selected dependencies in dependency-first order only when dependency mounting is enabled and the combined outfit plus dependencies fit their existing size limit
  • approved dependency downloads bypass the per-item size check only after the combined outfitter_maxsize limit has been enforced
  • dependency downloads receive Outfitter's normal blacklist checks; individual failures are aggregated and reported without discarding valid siblings
  • enabling dependency mounting or increasing the maximum download size retries relevant local and remote outfits
  • OutfitInfo() retains its established four return values; dependency state uses a separate accessor

Already-mounted Workshop content cannot be unmounted until Garry's Mod restarts, and the review dialog communicates this limitation.

Validation

  • GLuaLint passes using the repository configuration
  • git diff --check passes
  • automated synthetic validation: 25/25
  • live Workshop graph, planning, limit, and mount validation: 4/4
  • real dependency-bearing player-model wear, autowear, and removal validation: 4/4
  • visual dependency-dialog validation: 1/1
  • local multiplayer validation passed for host, receiver, server, and late joiner
  • full manual UI and interaction validation completed with no issues found

The live tests used Workshop 1640675931 for dependency graph and mount behavior and Workshop 3663235245 for the full player-model wear path.

@ilker2445 ilker2445 force-pushed the dependency-manifest-final branch 2 times, most recently from 9d0b96c to 66e2cc9 Compare June 15, 2026 23:01
@ilker2445 ilker2445 force-pushed the dependency-manifest-final branch from 66e2cc9 to 273b33a Compare June 15, 2026 23:34
@Python1320 Python1320 merged commit 6c3e505 into Metastruct:dev Jun 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants