• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
Version v1.5 RC19 has been released: https://www.dropbox.com/s/id7dctcbqhfz3oe/Audax.Validator v1.5 RC19.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.

Note: the Validator will not be receiving updates for a few weeks, though I will still be posting on the forums as needed. If the above version is fatally broken, try an earlier version.
 
RC 19 doesn't appear to be broken, so that's good. I have a crash bug:

When I use this command from the ValidatorSettings.txt file, and the "Modifiers" option is enabled:

# Disables check that all keys are found in the localization file. This assumes that you use keys everywhere. If not you'll get lots of false positives.
AddFlag = NoCheckKey

I get:

Code:
Beginning validation...
Beginning Modifiers validation...

ERROR: type not found: Type
Status: Attempting to load type from placeholder.
ITEMS IN SCOPE
 %ModulePath: Audax.Clausewitz.IO.CFilePath
 $IfPreprocessor.Flags: Audax.Validator.IfSystem.IfPreprocessor+Flags
ModifierFile: Audax.Validator.TypeCore.ComplexConstraint
TriggeredModifierFile: Audax.Validator.TypeCore.ComplexConstraint
ReligionModifierFile: Audax.Validator.TypeCore.ComplexConstraint
ReligionModifierDef: Audax.Validator.TypeCore.ComplexConstraint
OpinionModifiersFile: Audax.Validator.TypeCore.ComplexConstraint
OpinionModifierDef: Audax.Validator.TypeCore.ComplexConstraint
FactorModifier: Audax.Validator.TypeCore.ComplexConstraint
 %ValidatorList: System.Collections.Generic.List`1[Audax.Validator.ValidatorJob]
 %TheValidator: Audax.Validator.GameValidator
Child: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
Child: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
Optional: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
Optional: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
Single: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
Single: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
Required: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
Required: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
OptionList: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
OptionList: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
RequiredList: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
RequiredList: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
PdoList: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
PdoList: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
Debug: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
Debug: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
Untyped: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplateConstraintFactory
Untyped: Audax.Validator.TypeCore.ChildConstraintSystem.NodeTemplate
Bool: Audax.Validator.TypeCore.EnumConstraint
0: Audax.Validator.TypeCore.LiteralConstraint
1: Audax.Validator.TypeCore.LiteralConstraint
2: Audax.Validator.TypeCore.LiteralConstraint
3: Audax.Validator.TypeCore.LiteralConstraint
4: Audax.Validator.TypeCore.LiteralConstraint
5: Audax.Validator.TypeCore.LiteralConstraint
6: Audax.Validator.TypeCore.LiteralConstraint
7: Audax.Validator.TypeCore.LiteralConstraint
-1: Audax.Validator.TypeCore.LiteralConstraint
-2: Audax.Validator.TypeCore.LiteralConstraint
-3: Audax.Validator.TypeCore.LiteralConstraint
-4: Audax.Validator.TypeCore.LiteralConstraint
-5: Audax.Validator.TypeCore.LiteralConstraint
-6: Audax.Validator.TypeCore.LiteralConstraint
-7: Audax.Validator.TypeCore.LiteralConstraint
NonNegOrNullInt: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NonNegativeDouble: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
PosDbl: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
PositivePercent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
IntPercent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
Percent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NonNegPercent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
DblPercent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NonNegDblPercent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
PositiveDoublePercent: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NonZeroInt: Audax.Validator.TypeCore.ComplexConstraint
NonZeroDouble: Audax.Validator.TypeCore.ComplexConstraint
NonZeroDblPercent: Audax.Validator.TypeCore.ComplexConstraint
PositiveInt: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NegativeInt: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NonNegativeInt: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NonPositiveInt: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
NegOneOrPositiveInt: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraint
PosInt: Audax.Validator.TypeCore.PlaceholderConstraint
NegInt: Audax.Validator.TypeCore.PlaceholderConstraint
NonNegInt: Audax.Validator.TypeCore.PlaceholderConstraint
NonZeroDbl: Audax.Validator.TypeCore.PlaceholderConstraint
NzDbl: Audax.Validator.TypeCore.PlaceholderConstraint
NonNegDbl: Audax.Validator.TypeCore.PlaceholderConstraint
NnDbl: Audax.Validator.TypeCore.PlaceholderConstraint
NnDouble: Audax.Validator.TypeCore.PlaceholderConstraint
NnDblP: Audax.Validator.TypeCore.PlaceholderConstraint
PInt: Audax.Validator.TypeCore.PlaceholderConstraint
NInt: Audax.Validator.TypeCore.PlaceholderConstraint
NnInt: Audax.Validator.TypeCore.PlaceholderConstraint
NzDblP: Audax.Validator.TypeCore.PlaceholderConstraint
NzInt: Audax.Validator.TypeCore.PlaceholderConstraint
NnP: Audax.Validator.TypeCore.PlaceholderConstraint
PDblP: Audax.Validator.TypeCore.PlaceholderConstraint
PDbl: Audax.Validator.TypeCore.PlaceholderConstraint
Empty: Audax.Validator.TypeCore.ComplexConstraint
Localization: Audax.Validator.Clausewitz.Localization.LocalizationManager+LocalizationValidatorFactory
AllOf: Audax.Validator.TypeExtension.AllOfConstraintFactory
AllOrNone: Audax.Validator.TypeExtension.AllOrNoneConstraintFactory
AtMostOne: Audax.Validator.TypeExtension.AtMostOneConstraintFactory
AttributeLimits: Audax.Validator.TypeExtension.AttributeConstraintFactory
Catch: Audax.Validator.TypeExtension.CatchConstraintFactory
InOrder: Audax.Validator.TypeExtension.InOrderConstraintFactory
SkipIfEmpty: Audax.Validator.TypeExtension.SkipIfEmptyConstraintFactory
ExaminePath: Audax.Validator.TypeCore.ExaminePathConstraintFactory
FilePath: Audax.Validator.TypeExtension.PathConstraintFactory
FileExists: Audax.Validator.NewCore.FileExistsConstraintFactory
NodeSwitcher: Audax.Validator.TypeExtension.NodeSwitcherFactory
OneOf: Audax.Validator.TypeExtension.OneOfConstraintFactory
RestrictedNumber: Audax.Validator.TypeExtension.RestrictedNumberConsr.RestrictedNumberConstraintFactory
Right: Audax.Validator.TypeExtension.RightConstraintFactory
Throw: Audax.Validator.TypeExtension.ThrowConstraintFactory
ValidateFile: Audax.Validator.TypeExtension.ValidateFileConstraintFactory
AddContextValidatorStackFrame: Audax.Validator.ContextValidatorSystem.AddContextValidatorStackFrameConstraintFactory
ContextValidator: Audax.Validator.ContextValidatorSystem.ContextValidatorConstraintFactory
Ensure: Audax.Validator.EnsureConstraintSystem.EnsureConstraintFactory
Eval: Audax.Validator.Eval.EvalConstraintFactory
GroupValidator: Audax.Validator.GroupValidatorFactory
Local: Audax.Validator.TypeCore.Locals.LocalConstraintFactory
LocalContainer: Audax.Validator.TypeCore.Locals.LocalContainerValidatorFactory
LocalOp: Audax.Validator.TypeCore.Locals.LocalOpConstraintFactory
ResourceUseValidator: Audax.Validator.ResourceUse.ResourceUseValidatorFactory
Ch: Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraintFactory
Inherits: Audax.Validator.TypeCore.InheritanceConstraintFactory
Default: Audax.Validator.TypeExtension.DeclarativeValidatorFactory
Null: Audax.Validator.TypeExtension.NullValidatorFactory
SetFlag: Audax.Validator.TypeExtension.SetFlagValidatorFactory
FancyUniqueId: Audax.Validator.TypeExtension.FancyUniqueIdConstraintFactory
UniqueId: Audax.Validator.TypeExtension.UniqueIdConstraintFactory
 %Name: Crusader Kings II
 %Key: Ck2
 %System: Ck2
Ck2TitleCheckKey: Audax.Validator.Clausewitz.Ck2.Ck2TitleCheckKeyFactory
Ck2ProvinceHistoryCheckKey: Audax.Validator.Clausewitz.Ck2.Ck2ProvinceHistoryCheckKeyConstraintFactory
Ck2CheckModifierKey: Audax.Validator.Clausewitz.Ck2.Ck2CheckModifierKeyFactory
CheckKey: Audax.Validator.Clausewitz.Localization.LocalOpConstraintFactory
IconRef: Audax.Validator.NewCore.IconRefConstraintFactory
_ContextValidatorInfo.List.@@48434940jfdjs: System.Collections.Generic.List`1[Audax.Validator.ContextValidatorSystem.ContextValidator]
TacticGroup: Audax.Validator.TypeCore.EnumConstraint
Phase: Audax.Validator.TypeCore.EnumConstraint
ReligionModifier: Audax.Validator.TypeCore.EnumConstraint
StaticModifier: Audax.Validator.TypeCore.EnumConstraint
NormalModifier: Audax.Validator.TypeCore.EnumConstraint
TriggeredModifier: Audax.Validator.TypeCore.EnumConstraint
Modifier: Audax.Validator.TypeCore.ComplexConstraint
BaseModifier: Audax.Validator.TypeCore.ComplexConstraint
ProvModifier: Audax.Validator.TypeCore.ComplexConstraint
CharModifier: Audax.Validator.TypeCore.ComplexConstraint
OpinionModifier: Audax.Validator.TypeCore.EnumConstraint
Nickname: Audax.Validator.TypeCore.EnumConstraint
Objective: Audax.Validator.TypeCore.EnumConstraint
Tech: Audax.Validator.TypeCore.EnumConstraint
MinorTitle: Audax.Validator.TypeCore.EnumConstraint
SiegeTrigger: Audax.Validator.TypeCore.ComplexConstraint
SiegeCommand: Audax.Validator.TypeCore.ComplexConstraint
WarTrigger: Audax.Validator.TypeCore.ComplexConstraint
WarCommand: Audax.Validator.TypeCore.ComplexConstraint
SideTrigger: Audax.Validator.TypeCore.ComplexConstraint
ContextValidatorInfoNode: Element: ContextValidatorInfo
_ContextValidatorInfo.@@48434940jfdjs: Audax.Validator.ContextValidatorSystem.ContextValidatorInfo
CharEventId: Audax.Validator.ContextValidatorSystem.ContextFileCrawler+EventIdConstraint
ProvEventId: Audax.Validator.ContextValidatorSystem.ContextFileCrawler+EventIdConstraint
LetterEventId: Audax.Validator.ContextValidatorSystem.ContextFileCrawler+EventIdConstraint
NarrativeEventId: Audax.Validator.ContextValidatorSystem.ContextFileCrawler+EventIdConstraint
DiploRespEventId: Audax.Validator.ContextValidatorSystem.ContextFileCrawler+EventIdConstraint
TitleEventId: Audax.Validator.ContextValidatorSystem.ContextFileCrawler+EventIdConstraint
ThisChar: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
NeedsRootAsChar: Audax.Validator.ContextValidatorSystem.NeedsRootAsConstraint
ThisOnlyChar: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
FromChar: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
ThisProv: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
NeedsRootAsProv: Audax.Validator.ContextValidatorSystem.NeedsRootAsConstraint
ThisOnlyProv: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
FromProv: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
ThisLetter: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
NeedsRootAsLetter: Audax.Validator.ContextValidatorSystem.NeedsRootAsConstraint
ThisOnlyLetter: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
FromLetter: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
ThisNarrative: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
NeedsRootAsNarrative: Audax.Validator.ContextValidatorSystem.NeedsRootAsConstraint
ThisOnlyNarrative: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
FromNarrative: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
ThisDiploResp: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
NeedsRootAsDiploResp: Audax.Validator.ContextValidatorSystem.NeedsRootAsConstraint
ThisOnlyDiploResp: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
FromDiploResp: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
ThisTitle: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
NeedsRootAsTitle: Audax.Validator.ContextValidatorSystem.NeedsRootAsConstraint
ThisOnlyTitle: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
FromTitle: Audax.Validator.ContextValidatorSystem.ThisFromConstraint
CharTrigger: Audax.Validator.TypeCore.ComplexConstraint
ProvTrigger: Audax.Validator.TypeCore.ComplexConstraint
TitleTrigger: Audax.Validator.TypeCore.ComplexConstraint
CharCommand: Audax.Validator.TypeCore.ComplexConstraint
ProvCommand: Audax.Validator.TypeCore.ComplexConstraint
TitleCommand: Audax.Validator.TypeCore.ComplexConstraint
Key: Audax.Validator.TypeCore.PlaceholderConstraint
Yes: Audax.Validator.TypeCore.LiteralConstraint
No: Audax.Validator.TypeCore.LiteralConstraint
SuccessionType: Audax.Validator.TypeCore.EnumConstraint
WarEnd: Audax.Validator.TypeCore.EnumConstraint
DeathReason: Audax.Validator.TypeCore.EnumConstraint
OpinionClauseDefinedTypes: Audax.Validator.TypeCore.EnumConstraint
Tier: Audax.Validator.TypeCore.EnumConstraint
Attribute: Audax.Validator.TypeCore.EnumConstraint
Religion: Audax.Validator.TypeCore.EnumConstraint
ReligionGroup: Audax.Validator.TypeCore.EnumConstraint
Culture: Audax.Validator.TypeCore.EnumConstraint
CultureGroup: Audax.Validator.TypeCore.EnumConstraint
CasusBelli: Audax.Validator.TypeCore.EnumConstraint
Terrain: Audax.Validator.TypeCore.EnumConstraint
JobAction: Audax.Validator.TypeCore.EnumConstraint
GraphicalCultureType: Audax.Validator.TypeCore.EnumConstraint
Unit: Audax.Validator.TypeCore.EnumConstraint
JobTitle: Audax.Validator.TypeCore.EnumConstraint
Disease: Audax.Validator.TypeCore.EnumConstraint
Continent: Audax.Validator.TypeCore.EnumConstraint
CharacterId: Audax.Validator.TypeCore.EnumConstraint
DynastyId: Audax.Validator.TypeCore.EnumConstraint
Trait: Audax.Validator.TypeCore.EnumConstraint
Law: Audax.Validator.TypeCore.OrConstraint
UnitStatsModifier: Audax.Validator.TypeCore.ComplexConstraint
AllowSemicolonOnlyLines: Audax.Validator.TypeExtension.AllowSemicolonOnlyLinesConstraint
Int: Audax.Validator.TypeExtension.IntConstraint
String: Audax.Validator.TypeExtension.StringConstraint
Untyped: Audax.Validator.TypeExtension.UntypedConstraint
Debug: Audax.Validator.TypeExtension.DebugConstraint
Double: Audax.Validator.TypeExtension.DoubleConstraint
List: Audax.Validator.TypeExtension.ListConstraint
NamespaceEventId: Audax.Validator.ContextValidatorSystem.NamespaceEventIdConstraint
MotherConstraint: Audax.Validator.Clausewitz.Ck2.CharParentConstraint
FatherConstraint: Audax.Validator.Clausewitz.Ck2.CharParentConstraint
SpouseConstraint: Audax.Validator.Clausewitz.Ck2.SpouseConstraint
GuardianConstraint: Audax.Validator.Clausewitz.Ck2.GuardianConstraint
CharMaxAgeCheck: Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck
CharAliveAtHoldingCheck: Audax.Validator.Clausewitz.Ck2.CharAliveAtHoldingCheck
TwinCheck: Audax.Validator.Clausewitz.Ck2.TwinCheck
BastardCheck: Audax.Validator.Clausewitz.Ck2.BastardCheck
MercenaryModifier: Audax.Validator.TypeCore.EnumConstraint
Plot: Audax.Validator.TypeCore.EnumConstraint
Faction: Audax.Validator.TypeCore.EnumConstraint
CharBirthDeathCheck: Audax.Validator.Clausewitz.Ck2.CharBirthDeathCheck
LocalizationKey: Audax.Validator.TypeCore.EnumConstraint
FloatColor: Audax.Validator.TypeExtension.RestrictedListConstraint
Province: Audax.Validator.TypeCore.EnumConstraint
LandProvince: Audax.Validator.TypeCore.EnumConstraint
SeaProvince: Audax.Validator.TypeCore.EnumConstraint
ToleratesReligionGroupLiteral: Audax.Validator.Clausewitz.Ck2.ToleratesReligionGroupLiteral
EmpireTitle: Audax.Validator.TypeCore.EnumConstraint
KingTitle: Audax.Validator.TypeCore.EnumConstraint
DukeTitle: Audax.Validator.TypeCore.EnumConstraint
CountTitle: Audax.Validator.TypeCore.EnumConstraint
BaronTitle: Audax.Validator.TypeCore.EnumConstraint
AnyTitle: Audax.Validator.TypeCore.EnumConstraint
PentarchTitle: Audax.Validator.TypeCore.EnumConstraint
Color: Audax.Validator.TypeExtension.RestrictedListConstraint
Date: Audax.Validator.TypeExtension.RestrictedStringConstraint
CheckDateMatchesParent: Audax.Validator.NewCore.DateType+CheckDateMatchesParentValidator
CheckDupsInDates: Audax.Validator.NewCore.DupsInDatesConstraint
IconRefData: Audax.Validator.NewCore.IconRefDataConstraint
CheckDatesOrdered: Audax.Validator.NewCore.OrderedDateConstraint
SuccessionLaw: Audax.Validator.TypeCore.EnumConstraint
DeJureLaw: Audax.Validator.TypeCore.EnumConstraint
NormalLaw: Audax.Validator.TypeCore.EnumConstraint
GenderLaw: Audax.Validator.TypeCore.EnumConstraint
ImprovementKey: Audax.Validator.TypeCore.EnumConstraint
ImprovementValue: Audax.Validator.TypeCore.EnumConstraint
Improvement: Audax.Validator.ScriptingSystem.DicEnumConstraint
Building: Audax.Validator.TypeCore.EnumConstraint
END ITEMS IN SCOPE

STACK TRACE
   at Audax.Validator.Scope.Resolve[T](String name)
   at Audax.Validator.Reference`1.get_Value()
   at Audax.Validator.TypeCore.PlaceholderConstraint.get_Actual()

ec) EXCEPTION CONTEXT
ec) Validation Task: Modifiers
Validation Key: Modifiers
Validation Type: Audax.Validator.GroupValidator



ERROR
System.AggregateException: One or more errors occurred. ---> Audax.Validator.IgnoreException: Exception of type 'Audax.Validator.IgnoreException' was thrown.
   at Audax.Validator.TypeCore.PlaceholderConstraint.get_Actual()
   at Audax.Validator.TypeExtension.NodeSwitcher.ValidateAsBase(ElementNode node, Constraint constraint, NodeFlags flags)
   at Audax.Validator.TypeExtension.NodeSwitcher.Worker.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeExtension.NodeSwitcher.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate()
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.GroupValidator.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.<>c__DisplayClass5.<Validate>b__3(ValidatorJob val)
   at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass7.<ExecuteSelfReplicating>b__6(Object )
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
   at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)
---> (Inner Exception #0) Audax.Validator.IgnoreException: Exception of type 'Audax.Validator.IgnoreException' was thrown.
   at Audax.Validator.TypeCore.PlaceholderConstraint.get_Actual()
   at Audax.Validator.TypeExtension.NodeSwitcher.ValidateAsBase(ElementNode node, Constraint constraint, NodeFlags flags)
   at Audax.Validator.TypeExtension.NodeSwitcher.Worker.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeExtension.NodeSwitcher.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate()
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.GroupValidator.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.<>c__DisplayClass5.<Validate>b__3(ValidatorJob val)
   at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass7.<ExecuteSelfReplicating>b__6(Object )<---

In the Debugging section of the Validator. It doesn't work unless I comment out the AddFlag = NoCheckKey line.
 
Some false positives:

Code:
--- Error 1 of 1 ---
At <mod>\common\cultures\00_north_germanic.txt [north_germanic\graphical_culture] (Line 5, column 2):
"westerngfx" is not a valid GraphicalCultureType.

At <mod>\common\cb_types\00_cb_types.txt [holy_war\can_use_title\FROM\OR\any_realm_province\ROOT\any_realm_province\NOT\distance\where] (Line 2506, column 10):
"PREVPREV" is not a valid Province.

--- Error 1 of 1 ---
At <mod>\common\religions\01_muslim.txt [muslim\shiite\matrilineal_marriages] (Line 129, column 3):
Invalid node "matrilineal_marriages" in scope ReligionDef (value is: no)

--- Error 1 of 1 ---
At <mod>\common\religions\00_christian.txt [christian\catholic\can_have_antipopes] (Line 40, column 3):
Invalid node "can_have_antipopes" in scope ReligionDef (value is: yes)

--- Error 1 of 1 ---
At <mod>\common\objectives\00_factions.txt [faction_antiking\rel_head_loyalist] (Line 3778, column 2):
Invalid node "rel_head_loyalist" in scope ObjectiveDef (value is: yes)

--- Error 1 of 1 ---
At <mod>\common\objectives\00_factions.txt [faction_antiking\cancel_on_leader_death] (Line 3779, column 2):
Invalid node "cancel_on_leader_death" in scope ObjectiveDef (value is: yes)

--- Error 1 of 1 ---
At <mod>\common\objectives\00_plots.txt [plot_gain_fellow_vassal_title\allow\is_recent_grant] (Line 2326, column 3):
Invalid node "is_recent_grant" in scope TitleObjectiveTrigger (value is: no)

--- Error 1 of 1 ---
Incorrect Literal
At <mod>\map\adjacencies.csv [Entry\2] (Line 135, column 7):
Expected value: 
Actual value: -1

Most of them are new commands in SoA except for 3.

- The Vanilla adjacencies.csv file has a line at the bottom that looks like:

-1;-1;;-1;-1;-1;-1;-1;-1

I believe it's used by the engine to terminate the adjacency procedure, and I'm too paranoid to remove it since Vanilla is using it.

- distance = {} works like spawn_unit = {}, so the PREVPREV in the error above is actually pointing to the first any_realm_province scope in this code block.

Code:
				any_realm_province = {
					duchy = { title = PREVPREVPREV }
					ROOT = {
						any_realm_province = {
							NOT = {
								distance = {
									where = PREVPREV
									value = 125
								}
							}
						}
					}
				}

- grahicalcultures

This one, we don't have a copy of /graphicalcultures/ inside of our /common/ folder so it's using the vanilla ones (we reference those). When I copy the Vanilla /graphicalcultures/ folder into our /common/ the Validator no longer spits out errors, but it's unnecessary duplication.
 
A false positive:

Code:
--- Error 1 of 1 ---
At <mod>\common\religions\03_pagan.txt [pagan_group\norse_pagan] (Line 73, column 2):
At most 1 instance(s) of a "intermarry" entry are allowed, but there are 11 instances.

I tested this just now. When I play a Norse Pagan character in the 867 start date, I am able to arrange marriages with all of the religions that are listed (that exist at that time).

intermarry = catholic
intermarry = orthodox
intermarry = norse_pagan_reformed
intermarry = baltic_pagan
intermarry = baltic_pagan_reformed
intermarry = slavic_pagan
intermarry = slavic_pagan_reformed
intermarry = finnish_pagan
intermarry = finnish_pagan_reformed
intermarry = celtic_pagan
intermarry = celtic_pagan_reformed

So I checked with Baltic/Slavic/Finnish/Catholic/Orthodox and the marriages worked fine. When I tried to arrange a marriage with a Tengri, the "Must not marry an infidel" tooltip was there and I couldn't do it. Vanilla only has a couple of these intermarry things but I'm pretty sure you can use many and they work in the game.
 
Just trying the validator for the first time.

What do the global flag warnings mean. It simply gives a list of global flags and their location, but no indication of what warning there is.
Code:
enable_casusbellis
	chk|chk: <mod>\common\cb_types\00_cb_types.txt (Line 8012, column 4) [has_global_flag = enable_casusbellis]
What does it mean when there is a warning over my global_flag?
When I open the text file it doesn't mention why there is a warning either.

Edit:
There is a false positive for location under provtrigger.
--- Error 1 of 1 ---
At <mod>\decisions\vanilla_redetermine_decision.txt [decisions\liege_0\effect\hidden_tooltip\any_playable_ruler\limit\any_demesne_province\location] (Line 21, column 7):
Invalid node "location" in scope ProvTrigger (value is: <a complex type>)
It may be unnecessary, but it does work and hence is probably a valid node.
 
Last edited:
The Validator can't seem to handle a symbolic link going from the mod folder in My Documents to the mod folder in the game folder; it makes it think there's two copies of the dependency, and it therefore refuses to do anything beyond spitting out the error message:
--- Error 1 of 1 ---
Parse Failure
Path: <appdir>\C:\Crusader Kings II\mod\ProjectBalance.mod
Error: There were 2 instances of the mod with name "-ARKOpack Armoiries-". It was required as a dependency of "Project Balance". These include the following: "C:\Crusader Kings II\mod\ARKOpack_Armoiries.mod", "E:\Meneth\Documents\Paradox Interactive\Crusader Kings II\mod\ARKOpack_Armoiries.mod",

A bit problematic, as I use a symbolic link to actually have the mod folder where I want it without CKII throwing a fuss about it.
 
Some false positives:

Code:
--- Error 1 of 1 ---
At <mod>\common\cultures\00_north_germanic.txt [north_germanic\graphical_culture] (Line 5, column 2):
"westerngfx" is not a valid GraphicalCultureType.

At <mod>\common\cb_types\00_cb_types.txt [holy_war\can_use_title\FROM\OR\any_realm_province\ROOT\any_realm_province\NOT\distance\where] (Line 2506, column 10):
"PREVPREV" is not a valid Province.

--- Error 1 of 1 ---
At <mod>\common\religions\01_muslim.txt [muslim\shiite\matrilineal_marriages] (Line 129, column 3):
Invalid node "matrilineal_marriages" in scope ReligionDef (value is: no)

--- Error 1 of 1 ---
At <mod>\common\religions\00_christian.txt [christian\catholic\can_have_antipopes] (Line 40, column 3):
Invalid node "can_have_antipopes" in scope ReligionDef (value is: yes)

--- Error 1 of 1 ---
At <mod>\common\objectives\00_factions.txt [faction_antiking\rel_head_loyalist] (Line 3778, column 2):
Invalid node "rel_head_loyalist" in scope ObjectiveDef (value is: yes)

--- Error 1 of 1 ---
At <mod>\common\objectives\00_factions.txt [faction_antiking\cancel_on_leader_death] (Line 3779, column 2):
Invalid node "cancel_on_leader_death" in scope ObjectiveDef (value is: yes)

--- Error 1 of 1 ---
At <mod>\common\objectives\00_plots.txt [plot_gain_fellow_vassal_title\allow\is_recent_grant] (Line 2326, column 3):
Invalid node "is_recent_grant" in scope TitleObjectiveTrigger (value is: no)

--- Error 1 of 1 ---
Incorrect Literal
At <mod>\map\adjacencies.csv [Entry\2] (Line 135, column 7):
Expected value: 
Actual value: -1

Most of them are new commands in SoA except for 3.

- The Vanilla adjacencies.csv file has a line at the bottom that looks like:

-1;-1;;-1;-1;-1;-1;-1;-1

I believe it's used by the engine to terminate the adjacency procedure, and I'm too paranoid to remove it since Vanilla is using it.

- distance = {} works like spawn_unit = {}, so the PREVPREV in the error above is actually pointing to the first any_realm_province scope in this code block.

Code:
				any_realm_province = {
					duchy = { title = PREVPREVPREV }
					ROOT = {
						any_realm_province = {
							NOT = {
								distance = {
									where = PREVPREV
									value = 125
								}
							}
						}
					}
				}

- grahicalcultures

This one, we don't have a copy of /graphicalcultures/ inside of our /common/ folder so it's using the vanilla ones (we reference those). When I copy the Vanilla /graphicalcultures/ folder into our /common/ the Validator no longer spits out errors, but it's unnecessary duplication.

- adjacencies.csv: I think your line is actually a bit different than vanilla (it has a -1 as the third entry instead of a blank) but that probably doesn't actually have any effect so this has been changed to accept -1 as well for the third entry, so this will be fixed if that was indeed the issue.
- graphicalcultures: I couldn't seem to reproduce this, can you link the mod that is having problems?

(The rest have been fixed)
 
Just trying the validator for the first time.

What do the global flag warnings mean. It simply gives a list of global flags and their location, but no indication of what warning there is.
Code:
enable_casusbellis
	chk|chk: <mod>\common\cb_types\00_cb_types.txt (Line 8012, column 4) [has_global_flag = enable_casusbellis]
What does it mean when there is a warning over my global_flag?
When I open the text file it doesn't mention why there is a warning either.

Edit:
There is a false positive for location under provtrigger.
--- Error 1 of 1 ---
At <mod>\decisions\vanilla_redetermine_decision.txt [decisions\liege_0\effect\hidden_tooltip\any_playable_ruler\limit\any_demesne_province\location] (Line 21, column 7):
Invalid node "location" in scope ProvTrigger (value is: <a complex type>)
It may be unnecessary, but it does work and hence is probably a valid node.

The warning flags are flags where a flag is checked, but never set, or set but never checked, or a few other things. In your case the flag seems to get but no one ever sets. Note that this can produce false positives if you don't enable all of the Validator checks. So maybe you do set the flag enable_casusbellis in an event, but you didn't choose to check events when validating, so the Validator is stupid and notes this as a warning when it really isn't.

I think most people would want to remove unnecessary scopes, since things are already complicated enough without a lot more dummy scopes.
 
The Validator can't seem to handle a symbolic link going from the mod folder in My Documents to the mod folder in the game folder; it makes it think there's two copies of the dependency, and it therefore refuses to do anything beyond spitting out the error message:
--- Error 1 of 1 ---
Parse Failure
Path: <appdir>\C:\Crusader Kings II\mod\ProjectBalance.mod
Error: There were 2 instances of the mod with name "-ARKOpack Armoiries-". It was required as a dependency of "Project Balance". These include the following: "C:\Crusader Kings II\mod\ARKOpack_Armoiries.mod", "E:\Meneth\Documents\Paradox Interactive\Crusader Kings II\mod\ARKOpack_Armoiries.mod",

A bit problematic, as I use a symbolic link to actually have the mod folder where I want it without CKII throwing a fuss about it.

Now what is supposed to happen is that the Validator gives a warning and picks one of the choices arbitrarily. But it's not really tested so please tell me if that doesn't happen.
 
Version v1.5 RC20 has been released: https://www.dropbox.com/s/7kf82cqof8hq054/Audax.Validator v1.5 RC20.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.

Note: if there are no major changes needed for this version, the next release will probably be 1.5, just because. This probably won't affect many people in any case.
 
Now it gives an error message if a dependency isn't found.
A dependency doesn't actually mean the mod depends on the other mod. It simply means in the case of any conflicts, all conflicts will be resolved in the favor of the mod claiming the other as a dependency.

Edit: After I removed the dependency it simply crashed:
Code:
StatusLog > ERROR
StatusLog > System.Diagnostics.Contracts.__ContractsRuntime+ContractException: Precondition failed: text != null
StatusLog >    at System.Diagnostics.Contracts.__ContractsRuntime.TriggerFailure(ContractFailureKind kind, String msg, String userMessage, String conditionTxt, Exception inner)
StatusLog >    at System.Diagnostics.Contracts.__ContractsRuntime.ReportFailure(ContractFailureKind kind, String msg, String conditionTxt, Exception inner)
StatusLog >    at System.Diagnostics.Contracts.__ContractsRuntime.Requires(Boolean condition, String msg, String conditionTxt)
StatusLog >    at Audax.Validator.Log.InternalWrite(String text)
StatusLog >    at Audax.Validator.Log.LogLine(LogLevel level, String tag, String line)
StatusLog >    at Audax.Validator.Log.E(String tag, String line)
StatusLog >    at Audax.Validator.ValidationManager.Run(Dispatcher dispatcher)
ValidationManager: StatusLog > There were 2 instances of the mod with name "-ARKOpack Armoiries-". It was required as a dependency of "Project Balance". These include the following: "C:\Crusader Kings II\mod\ARKOpack_Armoiries.mod", "E:\[user_name <******>]\Documents\Paradox Interactive\Crusader Kings II\mod\ARKOpack_Armoiries.mod", 
StatusLog > The Validator will arbitrarily choose one of them, but you should really look into this, unless you are doing something funny like using symbolic links.
ValidationManager: There were 2 instances of the mod with name "-ARKOpack Armoiries-". It was required as a dependency of "Project Balance". These include the following: "C:\Crusader Kings II\mod\ARKOpack_Armoiries.mod", "E:\[user_name <******>]\Documents\Paradox Interactive\Crusader Kings II\mod\ARKOpack_Armoiries.mod", 
The Validator will arbitrarily choose one of them, but you should really look into this, unless you are doing something funny like using symbolic links.
ValidationManager: 
App: A FATAL ERROR HAS OCCURRED
Time: 10.01.2014 12:10:12
Validator Version: 1.5 RC20 [1.5.19.0]
System.Diagnostics.Contracts.__ContractsRuntime+ContractException: Precondition failed: text != null
   at System.Diagnostics.Contracts.__ContractsRuntime.TriggerFailure(ContractFailureKind kind, String msg, String userMessage, String conditionTxt, Exception inner)
   at System.Diagnostics.Contracts.__ContractsRuntime.ReportFailure(ContractFailureKind kind, String msg, String conditionTxt, Exception inner)
   at System.Diagnostics.Contracts.__ContractsRuntime.Requires(Boolean condition, String msg, String conditionTxt)
   at Audax.Validator.Log.InternalWrite(String text)
   at Audax.Validator.Log.LogLine(LogLevel level, String tag, String line)
   at Audax.Validator.Log.E(String tag, String line)
   at Audax.Validator.ValidationManager.Run(Dispatcher dispatcher)
   at Audax.Validator.MainWindow.ValidateClick(Object sender, RoutedEventArgs e)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.Controls.Button.OnClick()
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
 
- adjacencies.csv: I think your line is actually a bit different than vanilla (it has a -1 as the third entry instead of a blank) but that probably doesn't actually have any effect so this has been changed to accept -1 as well for the third entry, so this will be fixed if that was indeed the issue.
- graphicalcultures: I couldn't seem to reproduce this, can you link the mod that is having problems?

(The rest have been fixed)

For that extra -1, I didn't realize vanilla was missing one of their entries and that was the difference. Thanks for adding the exclusion and I'm fairly sure it doesn't do anything at all; I've removed the line to test it and not had it blow up on me so I don't know what it's for.

With /graphicalculturetypes/ the mod that is causing the issue is CK2+ (which is primarily what I'm using the Validator for). I think it might have to do with the fact that we are using "replace_path=common". We have found that "replace_path" does not work recursively on the sub-directories, so we're blocking /common/ but not blocking /common/graphicalculturetypes/. It works in the game and it would probably cause a CTD if it did not work. I've got a workaround where I copy the vanilla /graphicalculturetypes/ into our /common/ folder when I'm doing Validator work on the mod (the same way I copy the ValidatorSettings.txt into the root of the mod), so it's not preventing me from validating the game.
 
Now it gives an error message if a dependency isn't found.
A dependency doesn't actually mean the mod depends on the other mod. It simply means in the case of any conflicts, all conflicts will be resolved in the favor of the mod claiming the other as a dependency.

Edit: After I removed the dependency it simply crashed:
Code:
StatusLog > ERROR
StatusLog > System.Diagnostics.Contracts.__ContractsRuntime+ContractException: Precondition failed: text != null
StatusLog >    at System.Diagnostics.Contracts.__ContractsRuntime.TriggerFailure(ContractFailureKind kind, String msg, String userMessage, String conditionTxt, Exception inner)
StatusLog >    at System.Diagnostics.Contracts.__ContractsRuntime.ReportFailure(ContractFailureKind kind, String msg, String conditionTxt, Exception inner)
StatusLog >    at System.Diagnostics.Contracts.__ContractsRuntime.Requires(Boolean condition, String msg, String conditionTxt)
StatusLog >    at Audax.Validator.Log.InternalWrite(String text)
StatusLog >    at Audax.Validator.Log.LogLine(LogLevel level, String tag, String line)
StatusLog >    at Audax.Validator.Log.E(String tag, String line)
StatusLog >    at Audax.Validator.ValidationManager.Run(Dispatcher dispatcher)
ValidationManager: StatusLog > There were 2 instances of the mod with name "-ARKOpack Armoiries-". It was required as a dependency of "Project Balance". These include the following: "C:\Crusader Kings II\mod\ARKOpack_Armoiries.mod", "E:\[user_name <******>]\Documents\Paradox Interactive\Crusader Kings II\mod\ARKOpack_Armoiries.mod", 
StatusLog > The Validator will arbitrarily choose one of them, but you should really look into this, unless you are doing something funny like using symbolic links.
ValidationManager: There were 2 instances of the mod with name "-ARKOpack Armoiries-". It was required as a dependency of "Project Balance". These include the following: "C:\Crusader Kings II\mod\ARKOpack_Armoiries.mod", "E:\[user_name <******>]\Documents\Paradox Interactive\Crusader Kings II\mod\ARKOpack_Armoiries.mod", 
The Validator will arbitrarily choose one of them, but you should really look into this, unless you are doing something funny like using symbolic links.
ValidationManager: 
App: A FATAL ERROR HAS OCCURRED
Time: 10.01.2014 12:10:12
Validator Version: 1.5 RC20 [1.5.19.0]
System.Diagnostics.Contracts.__ContractsRuntime+ContractException: Precondition failed: text != null
   at System.Diagnostics.Contracts.__ContractsRuntime.TriggerFailure(ContractFailureKind kind, String msg, String userMessage, String conditionTxt, Exception inner)
   at System.Diagnostics.Contracts.__ContractsRuntime.ReportFailure(ContractFailureKind kind, String msg, String conditionTxt, Exception inner)
   at System.Diagnostics.Contracts.__ContractsRuntime.Requires(Boolean condition, String msg, String conditionTxt)
   at Audax.Validator.Log.InternalWrite(String text)
   at Audax.Validator.Log.LogLine(LogLevel level, String tag, String line)
   at Audax.Validator.Log.E(String tag, String line)
   at Audax.Validator.ValidationManager.Run(Dispatcher dispatcher)
   at Audax.Validator.MainWindow.ValidateClick(Object sender, RoutedEventArgs e)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.Controls.Button.OnClick()
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

Wait it didn't complain at missing dependencies before? How strange. Hmm, will add a warning if dependencies aren't found. Will also fix the crash.

For that extra -1, I didn't realize vanilla was missing one of their entries and that was the difference. Thanks for adding the exclusion and I'm fairly sure it doesn't do anything at all; I've removed the line to test it and not had it blow up on me so I don't know what it's for.

With /graphicalculturetypes/ the mod that is causing the issue is CK2+ (which is primarily what I'm using the Validator for). I think it might have to do with the fact that we are using "replace_path=common". We have found that "replace_path" does not work recursively on the sub-directories, so we're blocking /common/ but not blocking /common/graphicalculturetypes/. It works in the game and it would probably cause a CTD if it did not work. I've got a workaround where I copy the vanilla /graphicalculturetypes/ into our /common/ folder when I'm doing Validator work on the mod (the same way I copy the ValidatorSettings.txt into the root of the mod), so it's not preventing me from validating the game.

Oh yeah, replace_path would mess things up. Is it important that you use replace_path instead of something else (at least for common, it seems like using replace_path won't really do anything useful since all of the text files in common are required to exist somewhere)? If so, could you explain exactly how replace_path works?
 
Version v1.5 RC21 has been released: https://www.dropbox.com/s/azf59mij34d2lsj/Audax.Validator v1.5 RC21.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.

Note: if there are no major changes needed for this version, the next release will probably be 1.5, just because. This probably won't affect many people in any case.
 
Version v1.5 has been released: https://www.dropbox.com/s/d1g8n8oi7csobu8/Audax.Validator v1.5.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.

This doesn't actually have any changes from the above RC for Ck2.
 
False positive from vanilla code:

Code:
--- Error 1 of 1 ---
At <mod>\common\cb_types\00_cb_types.txt [cb_install_antiking\attacker_rel_head_is_ally] (Line 6906, column 2):
Invalid node "attacker_rel_head_is_ally" in scope CbTypeDef (value is: yes)
What it looks like in vanilla 00_cb_types.txt:
attacker_rel_head_is_ally = yes # The attacker can call his (main) Pope into the war
 
Version v1.6 RC1 has been released: https://www.dropbox.com/s/nlui9ul7kbqlf5h/Audax.Validator v1.6 RC1.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.

If no issues are reported on either the Eu4 or Ck2 forums for a week, then a final 1.6 will be released and it will be the last version until a new patch comes out.
 
False positives:

Code:
--- Error 1 of 1 ---
At <mod>\events\events_core_judaism_misc.txt [character_event\option\random_list\50\death\death_reason] (Line 304, column 21):
"death_poor_health" is not a valid DeathReason.

--- Error 1 of 1 ---
At <mod>\events\events_core_judaism_courtier.txt [character_event\option\create_character\flag] (Line 288, column 4):
Invalid node "flag" in scope CharCreation (value is: ai_flag_refuse_conversion)

--- Error 1 of 1 ---
At events\birth_events.txt [character_event\option\dynasty] (Line 841, column 3):
"mother_bastard" is not a valid ThisChar, OpinionClauseDefinedTypes, or DynastyId.

--- Error 1 of 1 ---
At events\birth_events.txt [character_event\option\dynasty] (Line 769, column 3):
"father_bastard" is not a valid ThisChar, OpinionClauseDefinedTypes, or DynastyId.
The first one I tested and confirmed that it works. The second is used in vanilla files (I'm showing the error message from my mod because it's more convenient.) The third and fourth are vanilla false positives.
 
2 false positives, both in regards to files in cb_types

#1
Code in Question said:
Code:
		if = {
			limit = {
				FROM = { is_heretic = no }
			}
			FROM = { 
				religion_authority = {
					modifier = lost_holy_war
					years = 20
				}
				add_weak_pressed_claim = c_lecce
				add_weak_pressed_claim = c_consenza
				add_weak_pressed_claim = c_reggio
				add_weak_pressed_claim = d_calabria
			}
		}
Validator Error said:
Code:
--- Error 1 of 1 ---
At <mod>\common\cb_types\bookmark_cbs.txt [aghlabid_867\on_success\if\FROM\add_weak_pressed_claim] (Line 85, column 5):
Invalid node "add_weak_pressed_claim" in scope CharCommand (value is: c_lecce)
#2
Validator Error said:
Code:
--- Error 1 of 1 ---
At <mod>\common\cb_types\ck2plus_cb_types.txt [seize_trade_post\can_use_title\location\AND\ROOT\capital_scope\location] (Line 1660, column 7):
Invalid node "location" in scope ProvTrigger (value is: <a complex type>)

Oh yeah, replace_path would mess things up. Is it important that you use replace_path instead of something else (at least for common, it seems like using replace_path won't really do anything useful since all of the text files in common are required to exist somewhere)? If so, could you explain exactly how replace_path works?

Not sure if you got this answered, but replace_path last I checked only replaces files within the folder it is in, and not any subdirectories. For example, if you just replace path common, it will replace all the files (i.e. defines.lua, bookmarks.txt etc.) in common, but none of the folders (i.e. cb_types, buildings etc.)