In larger projects, it can be helpful to create a logical hierarchy for package dependencies. This structure can help guide developers toward a clean separation of concerns and help inform where new code should be added.

.commonality/config.json
{
  "constraints": {
    "*": {
      "disallow": ["application"],
    },
    "application": {
      "allow": ["ui", "data", "utility", "config"],
    },
    "ui": {
      "allow": ["ui", "utility", "config"],
    },
    "data": {
      "allow": ["data", "utility", "config"],
    },
    "utility": {
      "allow": ["utility", "config"],
    },
    "config": {
      "disallow": "*",
    },
  },
}