## Nourished 0.2.6-beta.3
**Requires MarieLib 0.1.1-beta.1+**: update MarieLib on Modrinth before launching this version.
### Highlights
- **Food saturation now affects nutrient gain**: high-saturation meals finally contribute more to nutrient bars than low-saturation snacks with the same hunger restore (see Fixed below)
- **Nutrient export for modpack authors** - categorized food reference files + GUI button + `/nourished export_all`
- **Per-nutrient response curves**: opt-in diminishing returns, confidence gating, synergy presets (off by default)
- **Config validation framework**: 10 validators, auto-run on load, `/nourished validate`
- **Tag audit tooling** - bundled tags vs live inference; `/nourished audit_tags` writes `tag_audit_report.json`
---
### Added
#### Nutrient export (modpack authors)
- MarieLib export resolver `nourished_nutrients` — per-item nutrients + calories from the live classification cascade
- Categorized export to `config/nourished/nourished_nutrients_export/` (one JSON per nutrient key: `fruits.json`, `proteins.json`, etc.) via **Export All Foods** (Scanner tab, singleplayer with an active world) or `/nourished export_all` (op 2)
- `/marieslib dump nourished_nutrients` — single-file export to `config/nourished/nourished_nutrients_export.json` (MarieLib `id`/`data` format; same live data, different layout)
- `config/nourished/OVERRIDES_README.md` — auto-created on first load when missing; documents `food_overrides.json` and the export-to-override workflow
#### Per-nutrient response curves (opt-in, off by default)
- `NutrientCurveRegistry` with presets: `FLAT`, `DIMINISHING`, `CONFIDENCE_GATED`, `SYNERGY`, plus custom grid support
- Override stack: bundled defaults → `config/nourished/nutrient_curves.json` → datapack → KubeJS (`NourishedAPI.registerNutrientCurve`)
- General tab: `enableNutrientCurves` and `defaultCurvePreset`
- Nutrients tab: per-nutrient preset picker
- When curves are off, legacy flat scale/clamp math is unchanged
#### Config validation framework
- Ten MarieLib `ConfigValidator` registrations (`nutrients.json`, `colors.json`, `food_overrides.json`, `scanner_spec.json`, source overrides/values, effects, food values, locks, raw food config)
- Runs automatically after initial registry load; FAIL/WARN counts log to the server console
- `/nourished validate` (op 2) — per-validator status and findings
- Client toast on FAIL directing you to run the command
#### Tag audit tooling (modpack authors)
- `TagInferenceMismatchRule`: bundled tag vs live runtime inference
- `NamespaceBiasRule`: bundled tag vs scanner namespace weights
- `/nourished audit_tags`, `/nourished audit`, `/nourished tag` (aliases, op 2)
- `/marieslib audit_tags nourished` - same quiet chat behavior
- Writes `config/nourished/tag_audit_report.json`; chat shows only the report path
#### Commands
- `/nourished set_all <value> <player>` (op 2) - set every registered nutrient bar to the same fill (0.0–1.0) without clearing diminishing-returns memory. Complements `/nourished set` and `/nourished reset`
---
### Fixed
#### Hunger & saturation (major gameplay fix)
- **Food saturation now contributes to nutrient gain.** Previously, saturation was hardcoded to zero in the diet-delta path — only hunger points were counted, so a dense high-saturation meal gave the same nutrient bump as a light snack restoring the same hunger. Saturation should now flows through correctly: richer, more filling foods contribute meaningfully more to nutrient bars.
- Affects all food eaten from this version forward with **no config change required**. Existing `nutrientGainScale` and `nutrientGainPerBiteMax` settings still apply on top of the corrected math.
#### Other fixes
- Legacy white (`-1` / `0xFFFFFFFF`) built-in nutrient colors in `nutrients.json` auto-repair on load to corrected bundled defaults; written back once
- KubeJS startup scripts failing `requireValueKey` for built-in or persisted nutrients — nutrients sync into `ValueRegistry` immediately after `NutrientRegistry.loadDefinitions()`
- Custom nutrients via API/KubeJS (`registerExternal`) not immediately classifiable — each registration now publishes to `ValueRegistry` right away (startup and mid-game)
- Food Scanner config tab showing a stale dark list panel after leaving a world
- Mis-tagged Fruits Delight items — `durian_flesh`, `hawberry_roll`, and `pear_with_rock_sugar` moved from proteins to fruits
- `/nourished tag` crashing with `NoClassDefFoundError: TagAuditReportWriter` against published MarieLib jars
---
### Changed
- Cloth Config screen refactored into per-tab category classes (behavior unchanged)
- Tag audit commands no longer spam findings into chat — only the report path is shown; use the JSON file for full detail
- Full categorized export is `/nourished export_all` → `nourished_nutrients_export/` folder. There is no `/nourished dump` — `/marieslib dump nourished_nutrients` writes `nourished_nutrients_export.json` (one file)
---
### Upgrade notes (from 0.2.6-beta.2)
1. Install **MarieLib 0.1.1-beta.1+** before launching
2. Nutrient colors in `nutrients.json` auto-repair on first load — no manual edit needed
3. `OVERRIDES_README.md` is created on first launch if absent; existing edits are never overwritten
4. Nutrient response curves are **off by default** — enable `enableNutrientCurves` in General config only when you want curve-based scaling
5. Run `/nourished audit_tags` after upgrading in a modpack world to generate `tag_audit_report.json` and review bundled-tag disagreements****
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }