changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "collisions": {
+ "description": "Keys defined in both a shared layer and a layer that consumes it.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "childLayer": {
+ "description": "The consuming layer, whose value wins at runtime.",
+ "type": "string"
+ },
+ "childValue": {
+ "description": "What the child layer holds — this is what renders."
+ },
+ "divergent": {
+ "description": "True when the two values differ, which is the dangerous case: the shared value silently never shows. Fix by deleting one side, never by moving.",
+ "type": "boolean"
+ },
+ "key": {
+ "description": "The key both layers define.",
+ "type": "string"
+ },
+ "sharedLayer": {
+ "description": "The layer that is fallen through to.",
+ "type": "string"
+ },
+ "sharedValue": {
+ "description": "What the shared layer holds."
+ }
+ },
+ "required": [
+ "key",
+ "sharedLayer",
+ "childLayer",
+ "sharedValue",
+ "childValue",
+ "divergent"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "guidance": {
+ "description": "How to act on the findings, in one paragraph.",
+ "type": "string"
+ },
+ "summary": {
+ "additionalProperties": false,
+ "description": "What the scan compared and what it found. This is what comes back when the full result is diverted to a file.",
+ "properties": {
+ "divergentCount": {
+ "description": "Of those, the ones whose values differ.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "locale": {
+ "description": "Locale the values were compared in.",
+ "type": "string"
+ },
+ "message": {
+ "description": "One sentence stating what the scan found.",
+ "type": "string"
+ },
+ "pairsChecked": {
+ "description": "(shared layer, consuming layer) pairs the scan compared. 0 for a single-layer project.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "reusableGroups": {
+ "description": "Of those, the ones a shared layer already covers. Present only when byValue was passed.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalCollisions": {
+ "description": "Keys defined in both a shared and a consuming layer.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "valueGroups": {
+ "description": "Groups of keys sharing a value. Present only when byValue was passed.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "totalCollisions",
+ "divergentCount",
+ "pairsChecked",
+ "locale"
+ ],
+ "type": "object"
+ },
+ "valueDuplicates": {
+ "description": "Different keys carrying the same value. Present only when byValue was passed.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "action": {
+ "description": "What to do: \"reuse\" a shared layer already has it, \"promote\" move one to a shared layer, \"consolidate\" duplication inside one layer.",
+ "enum": [
+ "reuse",
+ "promote",
+ "consolidate"
+ ],
+ "type": "string"
+ },
+ "members": {
+ "description": "Every key carrying the value, ordered so the shared ones come first.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "key": {
+ "description": "A key carrying this value.",
+ "type": "string"
+ },
+ "layer": {
+ "description": "The layer it lives in.",
+ "type": "string"
+ },
+ "shared": {
+ "description": "True when other layers fall through to this one, so the key is already reachable from them.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "key",
+ "layer",
+ "shared"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "normalized": {
+ "description": "What the members were grouped by — trimmed, case-folded, punctuation-stripped.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value as written, taken from the first member.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "value",
+ "normalized",
+ "action",
+ "members"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "collisions",
+ "guidance",
+ "summary"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "reportFile": {
+ "description": "Absolute path the full JSON result was written to. Read the file for the findings; the summary below is all that came back.",
+ "type": "string"
+ },
+ "summary": {
+ "additionalProperties": false,
+ "description": "The counts from the full result, so a caller can act on them without reading the file.",
+ "properties": {
+ "divergentCount": {
+ "description": "Of those, the ones whose values differ.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "locale": {
+ "description": "Locale the values were compared in.",
+ "type": "string"
+ },
+ "message": {
+ "description": "One sentence stating what the scan found.",
+ "type": "string"
+ },
+ "pairsChecked": {
+ "description": "(shared layer, consuming layer) pairs the scan compared. 0 for a single-layer project.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "reusableGroups": {
+ "description": "Of those, the ones a shared layer already covers. Present only when byValue was passed.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalCollisions": {
+ "description": "Keys defined in both a shared and a consuming layer.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "valueGroups": {
+ "description": "Groups of keys sharing a value. Present only when byValue was passed.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "totalCollisions",
+ "divergentCount",
+ "pairsChecked",
+ "locale"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "reportFile",
+ "summary"
+ ],
+ "type": "object"
+ }
+ ],
+ "type": "object"
+}