# Glossary

The terms these docs use, in one place.

**Asset**: a single piece of game content stored as data: one part, one body, one resource, one mission. PatchManager runs your patches against assets as they load.

**Label**: a group of assets that load together (parts, celestial bodies, and so on). A patch is registered against a label, then narrowed to specific assets by name. Typed modules pick the label for you.

**Address (or name)**: an asset's globally unique identifier under its label. It is what `:Named` matches against and what you pass when creating a new asset. For parts it is the part id, for bodies the body name, and so on.

**Patch**: a registered operation that targets assets under a label and changes them. You create one with a `Patch` call and configure it through the chained methods.

**Patch name**: the name you give a patch (the string in `PM.Parts:Patch("name")`). It identifies the patch to you and to other patches, and is not the name of the asset being changed.

**Namespaced id**: a patch's full id, `modId:patchName`. PatchManager prepends your mod id automatically, so two mods can use the same patch name without colliding.

**ModId**: your mod's id, available as a global. See [File layout and discovery](/doc/file-layout-and-discovery-vYcsLN5rtw).

**Converter**: the piece that turns an asset's raw JSON into the value your callback works with and back again. `PM.JSON` uses the generic converter, the typed modules each use their own. See [Converters explained](/doc/converters-explained-f5m0BgJz50).

**Pass**: one of three full sweeps over every patched label, run in order: Early, then Default, then Late. Selected with `:Early()` or `:Late()`. See [The patch lifecycle](/doc/the-patch-lifecycle-bV7YhyoMv8).

**Bucket (ordering bucket)**: one of three ordering groups within a pass, run in order: First, then Default, then Last. Selected with `:First()` or `:Last()`. Before and after relationships only apply within a single bucket.

**Gate**: a condition (`:Requires`, `:Has`, `:HasNo`) that decides whether a patch runs against a given asset, reporting a clean skip when it does not. See [Gates](/doc/gates-Zh2sLnyxZX).

**Feature**: a named item of content or behaviour that a campaign can have on or off. Its id has the form `ModId:FeatureId`. Patches and created assets are gated on features with `:Feature` and `:NoFeature`. Assets are gated on features with Addressables labels. See [Campaign features](/doc/campaign-features-9YIewcIArR) and [Features](/doc/features-geboWdIiDN).

**Default feature**: the feature that each mod has without a declaration, `ModId:ModId`. All content that a mod registers or ships needs this feature. A campaign without the default feature of a mod does not have the mod.

**Feature set**: the features of a campaign. PatchManager runs and caches patches separately for each set.

**Campaign pack**: the item that a player selects to start a campaign. It names the galaxy and the features that a new campaign starts with. See [Campaign packs](/doc/campaign-packs-5HBzAytKyU).

**The Do callback**: the function passed to `:Do` that receives an asset and changes it. See [The Do callback](/doc/the-do-callback-Qq6LNtj9BT).

**Module / data (parts)**: a part holds modules (`Module_Engine`), and a module holds data entries (`Data_Engine`) where most of its settings live. See [Parts](/doc/parts-TLgScEaMqZ).

**Indexed list**: a JSON list addressable by name as well as position (engine modes by `engineID`, variants by `VariantId`, and so on). It supports lookup-by-name verbs like `:Patch(key, callback)`.

**Summary**: the `pm_summary.log` report that PatchManager writes after each run. It has a part for each feature set, and lists the patches that applied, skipped, errored, and were removed. Your main debugging tool. See [Reading the summary](/doc/reading-the-summary-8ahmOdWbza).

**Universe**: PatchManager's internal model of all loaded mods and their patches for a run. You do not interact with it directly. It is the thing that resolves dependencies and ordering.

**Converter envelope**: the outer JSON wrapper around some assets (a `version`, a `data` subtree). Typed wrappers expose the inner subtree directly while preserving the envelope for round-tripping, so you usually edit fields without thinking about it.