# RuneWaker recipe schema Two recipes keep environment conversion separate from population/mechanics. Paths are project-relative unless an environment variable supplies the preserved source root. ## Environment recipe Required top-level fields: - `schemaVersion`: recipe format version. - `slug`: HealerMan dungeon ID and asset directory name. - `title`: display/source title. - `source`: preserved WDB, primary ROS, config, and entrance evidence. - `coordinateSystem`: source axes, units, and direction units. - `navigation`: Recast settings. - `review`: human review states. - `exceptions`: known limitations retained in metadata. `source` fields: - `rootEnvironmentVariable` / `relativeDefault`: source-root resolution. - `resourceRoot`: normally `Resource`. - `wdb`: WDB path relative to the source root. - `model`: primary ROS relative to `Resource`. - `dungeonConfig` / `dungeonConfigId`: server catalog join. - `entryLua` / `entryConstantPrefix`: authoritative entry constants; or - `entryCoordinates`: explicit position/direction with `reviewRequired`. ## Population recipe Required fields: - `dungeonId`, `zoneId`, and `runtimeIdPrefix`. - `expectedActiveRows` and `expectedBossSpawns` after the first refresh. - `files`: snapshot, generated source, reports, environment/nav, actor outputs. - `source`: source-root, catalogs, backup paths, SQL extraction instance. - `actors`: unique reviewed source ROS models. - `templates`: classification, display, combat, actor, and mechanics mappings. - `deferred`: explicit later-pass list. Template classifications are `combat`, `boss`, `deferred-object`, or `unclassified`. Generation refuses `unclassified` rows and combat/boss rows without a valid actor. Optional template fields: - `title`, `archetype`, `primaryColor`, `accentColor`, `visualScale`; - `hasLoot`, `spawnMask`, `objectiveNamePattern`; - `combat`: health/damage multipliers, movement, and leash overrides; - `attacks`: reviewed HealerMan attack definitions; - `reason`: why an object is deferred; - `source`: forensic image/model/classification evidence. `expected*` values may be `null` only in a fresh scaffold. The explicit forensic refresh with `--update-recipe` pins them. A recipe should not be treated as production-ready until all classifications/models and counts are reviewed.