compileWithDlm passes through cleanly when source has no @DLM sectionPASS
compileWithDlm rejects empty sourcePASS
decompileWithDlm rejects empty dataPASS
mergeSources combines disjoint data from two sourcesPASS
mergeSources primary_wins keeps the first source's value on conflictPASS
mergeSources secondary_wins keeps the second source's value on conflictPASS
mergeSources conflicts() reports the winning source and pathPASS
mergeSources rejects an empty source listPASS
mergeSourcesWeighted respects explicit per-source weightsPASS
MdixDatabase.mergeWith merges two already-loaded databasesPASS
validateSchema passes for data matching every required fieldPASS
validateSchema reports a missing required fieldPASS
validateSchema errors() returns a typed, inspectable arrayPASS
the same MdixSchema instance can validate more than one databasePASS
MdixWatcher reports unchanged on repeated identical contentPASS
MdixWatcher reports changed when content differsPASS
MdixWatcher.hasChanged is a cheap pre-check that doesn't update statePASS
MdixWatcher.reset forgets previously seen contentPASS
sibling fields are unaffected by the enum fieldPASS
enum field resolves name, field, and value togetherPASS
group array elements resolve their enum fields independentlyPASS
a failed read comes back through tryGet as an error, not a throwPASS
query returns None-equivalent ([]) for a missing or non-array pathPASS
query covers GroupArray items via the base path, no pattern neededPASS
filter reproduces where_'s field-based matchingPASS
filter + map reproduces where_ followed by selectPASS
sort descending + [0] reproduces order_by_desc().take(1)PASS
sort ascending + [0] reproduces order_by().take(1)PASS
slice reproduces skipPASS
reduce into a Map reproduces group_by, first-seen key orderPASS
some/every reproduce any/allPASS
[0]/.at(-1)/[n] reproduce first/last/nthPASS
queryMany matches sibling wildcarded pathsPASS
reduce reproduces sum_int / avg_floatPASS
reduce reproduces min_by_key (no tie in this fixture)PASS
max needs >= (not >) in the reducer to match max_by_key's tie-breakPASS
terminal ops on an empty result behave the same as on DixQuery::new(vec![])PASS