This skill validates SPID, KID, BOS, SkyPatcher, and source-locked CDF rules.
Commands
python scripts\lint_framework_configs.py <files-or-directories>
python scripts\verify_framework_truth.py
python ..\skyrim-base-object-swapper\scripts\audit_bos_configs.py <bos-directory>
python ..\skyrim-container-distribution\scripts\lint_cdf_json.py <json>
Contract coverage
SPID
- standard,
Death<Type>,ExclusiveGroup, and linked key families; - key-specific field layouts;
- one-to-seven normal fields and one-to-four linked fields;
- field-aware LevelFilters, TraitFilters, count/index, and Chance;
- trailing semicolon comments;
Weapon =rejection whileItem =remains valid.
KID
- ordinary
Keywordtwo-to-five fields; - required human-readable type for ordinary rows;
- record signatures and blank ordinary types rejected;
- special
ExclusiveGroupgrammar; - trailing semicolon comments.
BOS
- section and field count;
- transform/property/chance grammar;
- whitespace inside invocations rejected by both the general linter and the BOS auditor;
- duplicate targets reported without inventing a semantic winner.
Validator disagreement protocol
A published config is evidence, not proof. A validator result is also evidence, not proof. When the linter conflicts with the exact parser, accepted runtime log, or a known-positive deployed behavior:
- do not rewrite the mod merely to satisfy the linter;
- reproduce the disagreement with the exact line;
- inspect the parser/version and runtime log;
- mark the validator finding as disputed;
- repair the validator first when its contract is wrong;
- add the real line as a production-path regression fixture.
A claimed regression test is insufficient when it tests a helper that the actual
CLI/auditor never calls. verify_framework_truth.py executes the production
entry points against production-shaped fixtures.
Limits
Static validation cannot prove form resolution, semantic BOS coordinates, intended actor selection, hook safety, or in-game behavior.