From 59557146eba0c43e6b931a432b5328fd12372457 Mon Sep 17 00:00:00 2001 From: Alan Tse Date: Mon, 1 Jun 2026 11:26:48 -0700 Subject: [PATCH 1/2] fix(aio): include Terrain Helper in AIO bundle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Terrain Helper author has approved bundling, so re-enable its AIO inclusion (autoupload = true). This also resolves the v1.6.0 issue where Terrain Helper's TerrainHelper.esp leaked into the AIO while its shaders were stripped (the exclusion logic only removes Shaders/ paths) — the feature is now shipped complete instead of partially. Co-Authored-By: Claude Opus 4.8 --- features/Terrain Helper/Shaders/Features/TerrainHelper.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/Terrain Helper/Shaders/Features/TerrainHelper.ini b/features/Terrain Helper/Shaders/Features/TerrainHelper.ini index a791b0a489..9dbee137a6 100644 --- a/features/Terrain Helper/Shaders/Features/TerrainHelper.ini +++ b/features/Terrain Helper/Shaders/Features/TerrainHelper.ini @@ -5,4 +5,4 @@ Version = 1-0-1 nexusmodid = 143149 nexusfilegroupid = 000000 nexusfilename = Terrain Helper -autoupload = false +autoupload = true From 29f9f2798d469256e18b75be2f9900dacfde8edf Mon Sep 17 00:00:00 2001 From: Alan Tse Date: Mon, 1 Jun 2026 11:57:41 -0700 Subject: [PATCH 2/2] ci(audit): port AuditVersion opt-out; exempt Terrain Helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-pick (path-scoped) the AuditVersion opt-out from upstream community-shaders #2444 into tools/feature_version_audit.py — applied only to the audit script, not the 5 diverged pipeline workflows that PR also touched (those would conflict against our fork's AIO/aio-mode pipeline). Mark Terrain Helper AuditVersion = false: it is activation-only (no shaders under features/, all logic in src/Features/TerrainHelper.cpp), so the audit should not demand a version bump when only its toggle .ini changes. This makes the PR audit pass and stops the release --apply-bumps from spuriously bumping it — it stays 1-0-1 while remaining in the AIO (autoupload = true). Co-Authored-By: Claude Opus 4.8 --- .../Shaders/Features/TerrainHelper.ini | 3 +++ tools/feature_version_audit.py | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/features/Terrain Helper/Shaders/Features/TerrainHelper.ini b/features/Terrain Helper/Shaders/Features/TerrainHelper.ini index 9dbee137a6..8fb17320b5 100644 --- a/features/Terrain Helper/Shaders/Features/TerrainHelper.ini +++ b/features/Terrain Helper/Shaders/Features/TerrainHelper.ini @@ -1,5 +1,8 @@ [Info] Version = 1-0-1 +# Activation-only feature (all code lives in the core mod, no shaders here), so +# opt out of version auditing — bumping this toggle .ini on every edit is churn. +AuditVersion = false [Nexus] nexusmodid = 143149 diff --git a/tools/feature_version_audit.py b/tools/feature_version_audit.py index 16e52eb8d9..0823b5ed31 100644 --- a/tools/feature_version_audit.py +++ b/tools/feature_version_audit.py @@ -186,7 +186,7 @@ def get_feature_ini_metadata(feature_dir_or_ini_path): if not sections: sections = ['Info'] if parser.has_section('Info') else [] - metadata = {'auto_upload': False} + metadata = {'auto_upload': False, 'audit_version': True} for section in sections: if not parser.has_section(section): continue @@ -196,6 +196,15 @@ def get_feature_ini_metadata(feature_dir_or_ini_path): if auto_upload_str is not None: metadata['auto_upload'] = str(auto_upload_str).strip().lower() not in ('false', '0', 'no', 'off', '') + # Activation-only features keep all code in the core mod; their toggle + # .ini opts out of version auditing/bumping with `AuditVersion = false`. + # Auditing is on by default, so a blank value must NOT exclude the ini: + # only explicit falsy values opt out (unlike auto_upload, which is opt-in + # and treats blank as off). + audit_version_str = section_items.get('auditversion') or section_items.get('audit_version') + if audit_version_str is not None: + metadata['audit_version'] = str(audit_version_str).strip().lower() not in ('false', '0', 'no', 'off') + section_metadata = { 'mod_id': section_items.get('nexusmodid') or section_items.get('nexus_mod_id') or section_items.get('mod_id'), 'mod_filename': section_items.get('nexusfilename') or section_items.get('nexus_filename') or section_items.get('nexusmodfilename') or section_items.get('nexus_mod_filename') or section_items.get('mod_filename') or section_items.get('modname') or section_items.get('name'), @@ -630,6 +639,12 @@ def get_feature_key(feature_dir, feature_meta_map): meta = feature_meta_map.get(feature_key) ini_path = get_feature_ini(feature_dir) + # Activation-only features (e.g. Terrain Helper) opt out of version + # auditing via `AuditVersion = false` in their .ini: all their code lives + # in the core mod, so bumping the toggle .ini on every edit is meaningless + # churn. Skip them entirely from bump suggestions and PR-check failures. + if ini_path and not get_feature_ini_metadata(ini_path).get('audit_version', True): + continue # Use last release tag (version_ref) as the baseline for version proposals so that # multiple PRs between releases don't accumulate spurious bumps. prior_ver = get_prior_version(ini_path, version_ref) if ini_path else None