Required gates
- Version gate: active version, changelog, and ownership are correct.
- Diff gate: no unrelated or deployed files were modified.
- Plugin gate: run
forge plugin-infoandskyrim-plugin-authoring/scripts/audit_plugin_headers.pyfor every plugin. Header success is structural only. - Papyrus gate: changed scripts compile and packaged PEX files match the current build.
- Runtime-config gate: structural and semantic audits pass; installed framework versions are recorded.
- Native gate: every supported DLL target builds and its dependencies are inspected.
- Asset gate: referenced paths exist and generated outputs are identified.
- FOMOD gate: XML parses and referenced sources exist.
- Archive gate: run
scripts/validate_release_tree.py; inspect the final root manually. - Disclosure gate: list in-game or GUI tests that were not performed.
Target-aware plugin gate
Accept HEDR 1.70 or 1.71 when it matches the declared runtime/backport target. Reject an unexplained mismatch, not either value in isolation. Apply the legacy 0x800-0xFFF or extended light-ID policy accordingly.
Completion report
INPUTS: required_files=present|missing | attachments=present|missing
MEMORY CHECK: entries=... applied=...
AUTHORITY: installed=... parent=... active=... RESULT=PASS|FAIL
VERSION GATE: prior=... active=... copied_files=... changelog=YES|NO RESULT=PASS|FAIL
EXACT BUILD/COMPILE: command=... dependencies=... RESULT=PASS|FAIL|UNBUILT|N/A
FRAMEWORK VALIDATION: evidence=... RESULT=PASS|FAIL|N/A
SEMANTIC TEST: symptom/player-visible result=... RESULT=PASS|FAIL|UNTESTED
SHIP GATE: command=... RESULT=PASS|FAIL|N/A
FINAL ARCHIVE: path=... sha256=... version_strings=PASS|FAIL|N/A
RUNTIME STATUS: user-confirmed-runtime | runtime-evidenced | tool-validated | assistant-claimed | contradicted
SSEEDIT/CK: not launched
UNRESOLVED: none | exact remaining risks
Evidence-derived release gates
Add these mandatory lines to the verdict:
AUTHORITY: installed=... parent=... active=... RESULT=PASS|FAIL
EXACT BUILD: command=... dependencies=... RESULT=PASS|FAIL|UNBUILT|N/A
SEMANTIC TEST: user symptom/player-visible behavior RESULT=PASS|FAIL|UNTESTED
FINAL ARCHIVE: path=... sha256=... version_strings=PASS|FAIL
A parser pass, compile pass, or loader discovery cannot substitute for semantic/runtime evidence. Exclude developer-only artifacts unless the release explicitly includes a separate symbols package.
V4 plugin master gate
For every generated or changed plugin:
- audit HEDR, ESL flag, record form versions, local-ID mode, master indices, and HEDR count;
- fail extended local IDs below 0x800 unless HEDR is 1.71 and
Skyrim.esmis first master; - when master files are available, pass
--master-rootand validate 1.71 dependency compatibility plus transitive master ordering; - do not call a plugin runtime-valid from header checks alone.
V4 framework gate
Run the framework linter for every _KID.ini, _DISTR.ini, _SWAP.ini, or SkyPatcher tree. Run the CDF JSON linter for Container Distribution Framework rules. Confirm suffixes, supported keys, field-specific grammar, category placement, exact resolved forms, and runtime logs.
Mandatory regression fixtures include:
- SPID
Weapon =rejected andItem =accepted; - SPID
65/rejected while-C/-Dand18!remain accepted; - eight SPID sections rejected;
- comma TraitFilters rejected;
- BOS whitespace inside transform arguments rejected;
- CDF wildcard-like
addstrings rejected; - manager bookkeeping markers rejected from release trees.
Runtime-log reconciliation gate
For every shipped runtime framework, record:
files_discovered
rows_or_rules_read
rows_or_rules_accepted
rows_or_rules_rejected
unresolved_forms
optional_rules_skipped
features_disabled
conflicts_reported
A release fails when an intended feature family has zero accepted rows, every target is unresolved, or its required feature descriptor is disabled.
Manager-bookkeeping gate
Public and deployable archives must not contain:
__folder_managed_by_vortex
__folder_managed_by_vortex.json
meta.ini
*.meta
Fix the source package and redeploy. Do not treat deletion from live Data as a
release fix.
Validator integrity gate
Before changing a shipping config because a linter failed:
- compare the finding against the exact installed parser and runtime log;
- treat publication as evidence, not authority;
- do not modify runtime-accepted data solely to make a validator green;
- require a production-path fixture that invokes the same CLI/auditor used by the ship gate;
- fail the skill pack when a documented mandatory check is absent from the actual production tool.
Mandatory V4.3 fixtures include:
- BOS auditor detects
rotR(147.9, 355.9, 82.7); - SPID accepts
ExclusiveGroup,DeathItem, and linked key families; - SPID/KID trailing semicolon comments do not corrupt fields;
- KID accepts its special
ExclusiveGroupkey; - ordinary KID blank types and record signatures remain rejected under KID 4.0.6.