The shared rules() returned only meta sub-keys, so every caller still repeated its own 'platforms.*.meta' => array parent (with slightly different sometimes/ nullable combos). Fold the parent into rules() with a single safe contract so callers just spread one source for the whole meta block. |
||
|---|---|---|
| .. | ||
| Api | ||
| App | ||