• 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.
v1.4 RC3 has been released
Download here: https://www.dropbox.com/s/tgb3wku45xqnfag/Audax.Validator v1.4 RC3.rar

NOTE: Numerous changes have been made to the internals of the Validator, even though you may not notice much different on the outside. I will probably release at least one version a day until all the issues have been ironed out (assuming that there are issues). So it'd be good to test and see if anything is going wrong.
 
...I'm using this piece of software to help me fix a problem.

The error is 'Illegal Closing Bracket'. That's not helpful when I have no idea which one of many, many brackets is the actual problem. Finding the error doesn't help one fix it. Maybe a highlight or a guess?
 
I recommend using a editor like Notepad++. If you set the language to something like "C#", then it'll allow you to collapse any block, so that you can quickly collapse things until you see where the bad closing bracket is.

Also if you look at DidYouKnow.pdf, it shows you how to configure some text editors (include Notepad++) to jump straight to the line.

Also I think that the specific error of illegal closing bracket should have the line number somewhere in there, but am not sure.
 
Would that be 1.3 or your beta 1.4, because it surely ain't giving me a number/line right now, and the game is unplayable.

Both of them would have the same behavior. So there's no numbers in there at all that might be line numbers?

I recommend using Notepad++ or similar for brackets, because the Validator definitely can't point to the exact location of all parse errors, so being able to expand and collapse each block is extremely helpful.
 
1.4 has been released. Download here: https://www.dropbox.com/s/kpmr3xuz8vopd9v/Audax.Validator v1.4.rar

It says v1.4 RC5 on the app, but it is 1.4. Basically, I made a bunch of changes to how the app works, which may cause a bunch of bugs and stuff, and there's no particular reason to force you guys to deal with that (yet), since no changes were made for Ck2 really. I'll play with the changes for a while and iron out bugs internally (there's probably many of them) before releasing a version with more changes.
 
Hi!
Is it possible to increase the number of bugs that can be auto-fixed by the tool?

For example this:
Code:
The right sides of a "add_trait" clause may not be identical.
There were 2 duplicates.
	[I215118|L7393|C88]: add_trait = "shy"
	[I215080|L7393|C50]: add_trait = "shy"
Fixing this with a click would be awesome. A "fix all of this type" would be even better.

Also this:
Code:
Dates clauses are out of order. For optimal clarity, all date clauses should occur in chronological order. (There may be other out of order clauses, but only one error is shown per file)
Is this really thaaat bad? I usually put my liege information on top and the holders in a block below. I don't see a reason to change that as the engine doesn't care and I won't gain more clarity when I change that.
 
When I try using this with my mod, I get this error:

Parse Failure
Path: <appdir>\C:\Users\Josh\Documents\Paradox Interactive\Crusader Kings II\mod\western hemisphere.mod
Error: The path C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II\C:\Users\Josh\Documents\Paradox Interactive\Crusader Kings II\mod\western hemisphere does not exist.

I put "C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II" for the installation directory and "western hemisphere" for the mod name. How do I fix this?
 
When I try using this with my mod, I get this error:

Parse Failure
Path: <appdir>\C:\Users\Josh\Documents\Paradox Interactive\Crusader Kings II\mod\western hemisphere.mod
Error: The path C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II\C:\Users\Josh\Documents\Paradox Interactive\Crusader Kings II\mod\western hemisphere does not exist.

I put "C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II" for the installation directory and "western hemisphere" for the mod name. How do I fix this?

Same here. Tried different combinations but it gives these errors. Do the descriptions 'enter the game path' and 'enter the mod name' not apply to CK2?

Edit: The C# comment fixed to bracket errors btw (somehow that didn't cause any bugs though), so thanks for that:D
 
Last edited:
Well this is disheartening; I'm getting the exact same error, right when I have an issue with my mod that's making me pull my hair out (I CANNOT for the life of me figure out why its giving a character a county when I'm not even going near him.)

EDIT: I just tried using an earlier version of the validator (1.4 RC3), and it successfully validated files using the approach described in the above two posts, so I think that something in the new update might have broken the validator for CK2. Is it working for anyone?
 
Last edited:
Hi!
Is it possible to increase the number of bugs that can be auto-fixed by the tool?

For example this:
Code:
The right sides of a "add_trait" clause may not be identical.
There were 2 duplicates.
	[I215118|L7393|C88]: add_trait = "shy"
	[I215080|L7393|C50]: add_trait = "shy"
Fixing this with a click would be awesome. A "fix all of this type" would be even better.

Also this:
Code:
Dates clauses are out of order. For optimal clarity, all date clauses should occur in chronological order. (There may be other out of order clauses, but only one error is shown per file)
Is this really thaaat bad? I usually put my liege information on top and the holders in a block below. I don't see a reason to change that as the engine doesn't care and I won't gain more clarity when I change that.

- Unfortunately, it is fairly hard to do this correctly, since you also need to swallow up some amount of whitespace around the duplicate. Also I think there is often a preference as to which one should be removed (one of them would stick out wrongly), so the user would need to decide this.
- I think you should be able to disable the ordering check using the ValidatorSettings.txt file.

When I try using this with my mod, I get this error:

Parse Failure
Path: <appdir>\C:\Users\Josh\Documents\Paradox Interactive\Crusader Kings II\mod\western hemisphere.mod
Error: The path C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II\C:\Users\Josh\Documents\Paradox Interactive\Crusader Kings II\mod\western hemisphere does not exist.

I put "C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II" for the installation directory and "western hemisphere" for the mod name. How do I fix this?

Same here. Tried different combinations but it gives these errors. Do the descriptions 'enter the game path' and 'enter the mod name' not apply to CK2?

Edit: The C# comment fixed to bracket errors btw (somehow that didn't cause any bugs though), so thanks for that:D

Well this is disheartening; I'm getting the exact same error, right when I have an issue with my mod that's making me pull my hair out (I CANNOT for the life of me figure out why its giving a character a county when I'm not even going near him.)

EDIT: I just tried using an earlier version of the validator (1.4 RC3), and it successfully validated files using the approach described in the above two posts, so I think that something in the new update might have broken the validator for CK2. Is it working for anyone?

Sorry, I screwed up something really badly. It basically wouldn't work for anyone. Update incoming.
 
v1.4.1 is released, and it has a critical fix that makes mods work again, because I was stupid.

Link: https://www.dropbox.com/s/v20sm3orelnkqv1/Audax.Validator v1.4.1.rar

It is possible that recently-fixed bugs are reintroduced, although I don't think so. Basically I had to revert a bunch of stuff, of which I don't think any touched Ck2, but it may have. If you discover a regression, tell me what post I claimed to fix it and I'll reapply all the fixes after that.
 
Great, thanks!

Good news is, the validator works for me now; I can get it to recognize the mod, and it will run through some of the files.

Bad news is, whenever I try to validate characters, I get this error.

Code:
ERROR
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(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.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.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.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__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
   --- 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) System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(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.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.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.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__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
---> (Inner Exception #0) System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)<---
<---
 
Great, thanks!

Good news is, the validator works for me now; I can get it to recognize the mod, and it will run through some of the files.

Bad news is, whenever I try to validate characters, I get this error.

Code:
ERROR
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(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.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.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.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__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
   --- 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) System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(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.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.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.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__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
---> (Inner Exception #0) System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)<---
<---

Fixed in v1.4.2

Download here: https://www.dropbox.com/s/jh4w0t9irrbb8ou/Audax.Validator v1.4.2.rar
 
I believe so. Set it so your mini-mod has the "dependency" code in its .mod file. Then the validator should check the main mod as well. I'm pretty sure I did that a while back for my own personal modding.
 
Wehn I validated my files, the program mentioned 'invalid node' a lot of times (mainly with PREV, FROM and complex values) while the code was working.
That aside it also checked 600 duplicates for empty rows in my localisation files (my file had only 6 rows, for some reason 1200 lines were seen as values while I didn't touch them*. I would suggest the validator ignores duplicates when the value is nothing.

* When I select everything only the six lines are selected, so it's not due to clearing lines or anything (I think).