{
  "schema_version": "1.1",
  "item_count": 71,
  "quality_summary": "0 QA-flagged | 0 crop-risk | 0 sparse",
  "quality_thresholds": {
    "high_edge_ink_ratio": 0.02,
    "high_crop_risk_ink_ratio": 0.02,
    "low_non_white_ratio": 0.005
  },
  "items": [
    {
      "label": "variance / pvm_decomposition_ladder",
      "plugin_source": "variance-analysis",
      "plugin_source_label": "Variance Analysis",
      "source": "../variance/variance/pvm_decomposition_ladder.png",
      "output": "variance__pvm_decomposition_ladder.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1640,
        "height": 580
      },
      "stats": {
        "byte_count": 33455,
        "non_white_ratio": 0.05554247266610597,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": null,
      "sidecars": [
        {
          "label": "source",
          "href": "../variance/variance/pvm_decomposition_ladder.png"
        },
        {
          "label": "manifest",
          "href": "../variance/variance/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../variance/variance/used_recipe.json"
        }
      ],
      "orchestrator_contract": null,
      "orchestrator_readiness": {
        "ready": false,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [
          "context",
          "data"
        ],
        "broken_sidecars": [
          {
            "label": "source",
            "path": "/Users/fabio/Documents/GitHub/app_files/static/shared/variance/variance/pvm_decomposition_ladder.png"
          }
        ],
        "issues": [
          "missing_context",
          "missing_data",
          "missing_orchestrator_contract",
          "broken_sidecar"
        ]
      }
    },
    {
      "label": "variance / waterfall",
      "plugin_source": "variance-analysis",
      "plugin_source_label": "Variance Analysis",
      "source": "../variance/variance/waterfall.png",
      "output": "variance__waterfall.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1000,
        "height": 388
      },
      "stats": {
        "byte_count": 20148,
        "non_white_ratio": 0.08400773195876289,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": null,
      "sidecars": [
        {
          "label": "source",
          "href": "../variance/variance/waterfall.png"
        },
        {
          "label": "manifest",
          "href": "../variance/variance/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../variance/variance/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "variance.scenario_bridge",
        "plugin": "variance-analysis",
        "catalog_path": "plugins/variance-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Explain movement between baseline and comparison with the legacy vertical waterfall grammar.",
        "evidence_role": "movement_decomposition",
        "required_parameters": [
          "source_file",
          "metric",
          "comparison_basis",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "date_column",
          "driver_dimension",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "driver_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "xlsx"
            ]
          }
        ],
        "chart_spec_names": [
          "waterfall",
          "waterfall_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "driver_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            },
            {
              "parameter": "driver_dimension",
              "role": "selected_driver_dimension",
              "required": false,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "verticalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_vertical_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:verticalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "mainDimension": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesWaterfall": "derived from panel_dimension",
            "varianceAggregation": "comparison_basis/aggregation mode",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "mainDimension",
            "smallMultiplesColumn",
            "varianceAggregation",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": false,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [
          "context",
          "data"
        ],
        "broken_sidecars": [
          {
            "label": "source",
            "path": "/Users/fabio/Documents/GitHub/app_files/static/shared/variance/variance/waterfall.png"
          }
        ],
        "issues": [
          "missing_context",
          "missing_data",
          "broken_sidecar"
        ]
      }
    },
    {
      "label": "variance / waterfall_small_multiples",
      "plugin_source": "variance-analysis",
      "plugin_source_label": "Variance Analysis",
      "source": "../variance/variance/waterfall_small_multiples.png",
      "output": "variance__waterfall_small_multiples.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1510,
        "height": 1159
      },
      "stats": {
        "byte_count": 77337,
        "non_white_ratio": 0.035021056059974055,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": null,
      "sidecars": [
        {
          "label": "source",
          "href": "../variance/variance/waterfall_small_multiples.png"
        },
        {
          "label": "manifest",
          "href": "../variance/variance/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../variance/variance/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "variance.scenario_bridge",
        "plugin": "variance-analysis",
        "catalog_path": "plugins/variance-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Explain movement between baseline and comparison with the legacy vertical waterfall grammar.",
        "evidence_role": "movement_decomposition",
        "required_parameters": [
          "source_file",
          "metric",
          "comparison_basis",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "date_column",
          "driver_dimension",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "driver_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "xlsx"
            ]
          }
        ],
        "chart_spec_names": [
          "waterfall",
          "waterfall_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "driver_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            },
            {
              "parameter": "driver_dimension",
              "role": "selected_driver_dimension",
              "required": false,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "verticalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_vertical_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:verticalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "mainDimension": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesWaterfall": "derived from panel_dimension",
            "varianceAggregation": "comparison_basis/aggregation mode",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "mainDimension",
            "smallMultiplesColumn",
            "varianceAggregation",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": false,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [
          "context",
          "data"
        ],
        "broken_sidecars": [
          {
            "label": "source",
            "path": "/Users/fabio/Documents/GitHub/app_files/static/shared/variance/variance/waterfall_small_multiples.png"
          }
        ],
        "issues": [
          "missing_context",
          "missing_data",
          "broken_sidecar"
        ]
      }
    },
    {
      "label": "variance / root_cause_component_bridge",
      "plugin_source": "variance-analysis",
      "plugin_source_label": "Variance Analysis",
      "source": "../variance/variance/root_cause_component_bridge.png",
      "output": "variance__root_cause_component_bridge.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1280,
        "height": 684
      },
      "stats": {
        "byte_count": 42751,
        "non_white_ratio": 0.05240085891812866,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "variance.root_cause_component_bridge",
        "grammar": "variance.root_cause_component_bridge",
        "metrics": "Value_LC",
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../variance/variance/root_cause_component_bridge.png"
        },
        {
          "label": "context",
          "href": "../variance/variance/root_cause_component_bridge_context.json"
        },
        {
          "label": "data",
          "href": "../variance/variance/root_cause_component_bridge.csv"
        },
        {
          "label": "manifest",
          "href": "../variance/variance/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../variance/variance/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "variance.root_cause_component_bridge",
        "plugin": "variance-analysis",
        "catalog_path": "plugins/variance-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Create second-order root-cause component bridge artifacts by selected breakdown dimensions and variance type when a material total bridge needs price/volume/mix diagnostic support. This is diagnostic evidence and does not render baseline/final row bars.",
        "evidence_role": "root_cause_component_diagnostic",
        "required_parameters": [
          "source_file",
          "metric",
          "units_metric",
          "comparison_basis",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "date_column",
          "driver_dimension",
          "alternative_result",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "units_metric",
          "dimensions",
          "driver_dimension",
          "alternative_result",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "root_cause_component_bridge"
        ],
        "orchestrator_selection_guidance": {
          "use_when": [
            "The baseline/comparison movement is analytically material and business-relevant.",
            "The comparison is a scenario miss such as Actual vs Plan, Budget, or Forecast.",
            "The comparison is a YTD, rolling, fiscal, launch, campaign, pricing, distribution, or other named business window.",
            "The periods correspond to a documented trend break, inflection, intervention, or management question."
          ],
          "avoid_when": [
            "Do not launch full root-cause variance for arbitrary adjacent days, weeks, or months just because two periods are available.",
            "Do not treat a noisy short-period movement as explanatory without prior evidence that the movement is persistent, material, or tied to a known event."
          ],
          "orchestrator_gate": {
            "requires_comparison_relevance_reason": true,
            "short_calendar_period_default": "first_establish_materiality_with_period_trend_or_summary_evidence",
            "acceptable_reasons": [
              "named_business_period",
              "scenario_miss",
              "trend_break_or_inflection",
              "known_event_or_intervention",
              "management_requested_comparison",
              "material_ytd_or_rolling_window"
            ],
            "fallback_capabilities": [
              "period_comparison.line",
              "period_comparison.slope",
              "period_comparison.horizontal_waterfall",
              "variance.standard_waterfall"
            ]
          },
          "additional_gate": "Run component-by-dimension root cause only after the total bridge is useful and the question specifically needs price/volume/mix attribution by dimension."
        },
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          },
          "units_metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "driver_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "variance_type",
              "role": "component_type",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": 1
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "verticalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_vertical_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:verticalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "mainDimension": "dimensions/driver_dimension",
            "varianceAggregation": "legacy mixAndUnitsAggregation; plugin-facing mode is component_variance",
            "showInitialAndFinalValues": false,
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "mainDimension",
            "varianceAggregation"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "variance / total_by_dimension_bridge",
      "plugin_source": "variance-analysis",
      "plugin_source_label": "Variance Analysis",
      "source": "../variance/variance/total_by_dimension_bridge.png",
      "output": "variance__total_by_dimension_bridge.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1280,
        "height": 964
      },
      "stats": {
        "byte_count": 63759,
        "non_white_ratio": 0.031728961358921164,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "variance.total_by_dimension_bridge",
        "grammar": "variance.total_by_dimension_bridge",
        "metrics": "Value_LC",
        "dimensions": "Company",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../variance/variance/total_by_dimension_bridge.png"
        },
        {
          "label": "context",
          "href": "../variance/variance/total_by_dimension_bridge_context.json"
        },
        {
          "label": "data",
          "href": "../variance/variance/total_by_dimension_bridge.csv"
        },
        {
          "label": "manifest",
          "href": "../variance/variance/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../variance/variance/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "variance.total_by_dimension_bridge",
        "plugin": "variance-analysis",
        "catalog_path": "plugins/variance-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the total metric movement split by exactly one fixed dimension, one row per member, with baseline and comparison member values, total variance bars, and row-level percent-change pins.",
        "evidence_role": "single_dimension_total_variance",
        "required_parameters": [
          "source_file",
          "metric",
          "comparison_basis",
          "baseline_period",
          "comparison_period",
          "dimension"
        ],
        "optional_parameters": [
          "period_column",
          "date_column",
          "top_n",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "top_n",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "total_by_dimension_bridge"
        ],
        "orchestrator_selection_guidance": {
          "use_when": [
            "The user asks how the total revenue or sales movement is split by one named dimension such as company, brand, region, channel, or customer segment.",
            "The answer should show member starting values, ending values, absolute movement, and row-level percent movement.",
            "A compact single chart is preferable to Price / Units / Mix small multiples."
          ],
          "avoid_when": [
            "Do not use this when the user asks specifically for price, units, volume, or mix components.",
            "Do not use this as variable-dimension root-cause evidence; it keeps the same dimension on every row.",
            "Do not treat arbitrary noisy short-period comparisons as explanatory without a materiality or business relevance reason."
          ],
          "orchestrator_gate": {
            "requires_single_fixed_dimension": true,
            "component_variance_allowed": false,
            "root_cause_allowed": false,
            "fallback_capabilities": [
              "variance.scenario_bridge",
              "variance.price_volume_mix",
              "variance.root_cause_total_bridge"
            ]
          }
        },
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "dimension",
              "role": "fixed_row_dimension",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": 1
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "verticalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_vertical_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:verticalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "mainDimension": "[dimension]",
            "varianceAggregation": "legacy totalVarianceAggregation; plugin-facing mode is fixed_single_dimension_total_variance",
            "processingChoice": "runOneDimensionalAnalysis",
            "showInitialAndFinalValues": true,
            "plotSmallMultiplesWaterfall": false,
            "varianceInPercent": false,
            "shareOfTotalMarket": false,
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "mainDimension",
            "varianceAggregation",
            "processingChoice",
            "showInitialAndFinalValues",
            "plotSmallMultiplesWaterfall",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "variance / root_cause_total_bridge",
      "plugin_source": "variance-analysis",
      "plugin_source_label": "Variance Analysis",
      "source": "../variance/variance/root_cause_total_bridge.png",
      "output": "variance__root_cause_total_bridge.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1280,
        "height": 780
      },
      "stats": {
        "byte_count": 49184,
        "non_white_ratio": 0.05130709134615385,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "variance.root_cause_total_bridge",
        "grammar": "variance.root_cause_total_bridge",
        "metrics": "Value_LC",
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../variance/variance/root_cause_total_bridge.png"
        },
        {
          "label": "context",
          "href": "../variance/variance/root_cause_total_bridge_context.json"
        },
        {
          "label": "data",
          "href": "../variance/variance/root_cause_total_bridge.csv"
        },
        {
          "label": "manifest",
          "href": "../variance/variance/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../variance/variance/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "variance.root_cause_total_bridge",
        "plugin": "variance-analysis",
        "catalog_path": "plugins/variance-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Create primary root-cause total-variance bridge artifacts for selected breakdown dimensions, with baseline and comparison values per selected row, when the comparison movement is analytically material.",
        "evidence_role": "root_cause_total_decomposition",
        "required_parameters": [
          "source_file",
          "metric",
          "comparison_basis",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "date_column",
          "driver_dimension",
          "bridge_variant",
          "alternative_result",
          "drilldown_rows",
          "moved_rows",
          "auto_drilldown",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "driver_dimension",
          "bridge_variant",
          "alternative_result",
          "drilldown_rows",
          "moved_rows",
          "auto_drilldown",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "root_cause_total_bridge",
          "root_cause_total_bridge_drilldown",
          "root_cause_total_bridge_moved_rows"
        ],
        "orchestrator_selection_guidance": {
          "use_when": [
            "The baseline/comparison movement is analytically material and business-relevant.",
            "The comparison is a scenario miss such as Actual vs Plan, Budget, or Forecast.",
            "The comparison is a YTD, rolling, fiscal, launch, campaign, pricing, distribution, or other named business window.",
            "The periods correspond to a documented trend break, inflection, intervention, or management question."
          ],
          "avoid_when": [
            "Do not launch full root-cause variance for arbitrary adjacent days, weeks, or months just because two periods are available.",
            "Do not treat a noisy short-period movement as explanatory without prior evidence that the movement is persistent, material, or tied to a known event."
          ],
          "orchestrator_gate": {
            "requires_comparison_relevance_reason": true,
            "short_calendar_period_default": "first_establish_materiality_with_period_trend_or_summary_evidence",
            "acceptable_reasons": [
              "named_business_period",
              "scenario_miss",
              "trend_break_or_inflection",
              "known_event_or_intervention",
              "management_requested_comparison",
              "material_ytd_or_rolling_window"
            ],
            "fallback_capabilities": [
              "period_comparison.line",
              "period_comparison.slope",
              "period_comparison.horizontal_waterfall",
              "variance.standard_waterfall"
            ]
          }
        },
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "driver_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "driver_dimension",
              "role": "selected_driver_dimension",
              "required": false,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "verticalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_vertical_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:verticalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "mainDimension": "dimensions/driver_dimension",
            "varianceAggregation": "legacy totalVarianceAggregation; plugin-facing mode is total_variance",
            "drilldownParamsDictName": "drilldown_rows when requested",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "mainDimension",
            "varianceAggregation",
            "drilldownParamsDictName",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title",
            "showInitialAndFinalValues"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / comparison_table",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/comparison_table.html",
      "output": "period__comparison_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 700,
        "height": 337
      },
      "stats": {
        "byte_count": 27805,
        "non_white_ratio": 0.0712166172106825,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.comparison_table",
        "grammar": "period_comparison.comparison_table",
        "metrics": "Sales",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:172fe..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/comparison_table.html"
        },
        {
          "label": "context",
          "href": "../period/period/comparison_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/comparison_table_chart_data.csv"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.comparison_table",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Present baseline, comparison, absolute variance, and relative variance as a compact reporting table for total or entity-level period comparisons.",
        "evidence_role": "period_movement_evidence_table",
        "required_parameters": [
          "source_file",
          "metric",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "period_column",
          "date_column",
          "dimensions",
          "comparison_basis",
          "filters",
          "population_preparation",
          "sort_by",
          "max_rows",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "comparison_basis",
          "sort_by",
          "max_rows",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "png",
              "html",
              "csv"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "object_type": "table",
        "table_spec_names": [
          "comparison_table"
        ],
        "visual_family": "reporting_table",
        "selection_guidance": {
          "use_when": "Use for a compact sales-report table comparing one baseline period or scenario against one comparison period or scenario at total, entity, or hierarchy-row grain.",
          "avoid_when": "Do not use for ordered multi-period trend evidence; use the time series table or a trend chart when the row grain is time.",
          "prefer_when": [
            "The request asks for AC vs PY, AC vs PL, AC vs PQ, or another valid two-scenario comparison.",
            "The narrative needs exact baseline, comparison, absolute variance, and relative variance values.",
            "The report needs a small ranked or total table rather than a plot."
          ]
        },
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "row_hierarchy_or_entity_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            }
          ]
        },
        "native_table_contract": {
          "table_key": "comparison_table",
          "renderer": "native_reporting_table",
          "row_grain": "One total row when dimensions are omitted; one row per requested dimension member or hierarchy leaf when dimensions are provided.",
          "columns": [
            {
              "key": "row_label",
              "label": "Row",
              "role": "business_row_label",
              "alignment": "left"
            },
            {
              "key": "baseline_value",
              "label": "Baseline",
              "role": "scenario_value",
              "alignment": "numeric"
            },
            {
              "key": "comparison_value",
              "label": "Comparison",
              "role": "scenario_value",
              "alignment": "numeric"
            },
            {
              "key": "absolute_variance",
              "label": "Delta",
              "role": "absolute_variance",
              "alignment": "numeric",
              "signed": true
            },
            {
              "key": "relative_variance",
              "label": "Delta %",
              "role": "relative_variance",
              "alignment": "numeric",
              "signed": true
            },
            {
              "key": "comparison_share",
              "label": "Share",
              "role": "optional_share",
              "alignment": "numeric",
              "optional": true
            }
          ],
          "style_rules": [
            "Use thin row separators and no decorative fills.",
            "Align numeric values by decimal position and keep units in headers or subtitle.",
            "Use signed variance notation consistently for absolute and relative deltas.",
            "Emphasize subtotal or total rows only when they are present in the resolved table.",
            "Use in-cell variance bars only for dense ranked tables where they improve scanability."
          ],
          "reference_family": "reporting_table"
        },
        "orchestrator_request_contract": {
          "deterministic_entry_point": "plugins/period-comparison/scripts/period_core.py::run_period_comparison",
          "call_boundary": "The orchestrator supplies the required and optional request parameters; the period-comparison plugin owns data preparation, comparison validation, table rendering, artifact identity, and manifest output.",
          "required_parameters": [
            "source_file",
            "metric",
            "baseline_period",
            "comparison_period"
          ],
          "optional_parameters": [
            "period_column",
            "date_column",
            "dimensions",
            "comparison_basis",
            "filters",
            "population_preparation",
            "sort_by",
            "max_rows",
            "analysis_scope"
          ],
          "result_artifact_fields": [
            "artifact_id",
            "kind",
            "capability_id",
            "table_key",
            "table_spec_name",
            "resolved_parameters",
            "table_definition_hash",
            "path"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / time_series_table",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/time_series_table.html",
      "output": "period__time_series_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 668,
        "height": 460
      },
      "stats": {
        "byte_count": 37678,
        "non_white_ratio": 0.07177167404321791,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.time_series_table",
        "grammar": "period_comparison.time_series_table",
        "metrics": "Sales",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:75cb0..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/time_series_table.html"
        },
        {
          "label": "context",
          "href": "../period/period/time_series_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/time_series_table_chart_data.csv"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.time_series_table",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Present ordered period rows with baseline, comparison, absolute variance, and relative variance columns for compact sales-report evidence.",
        "evidence_role": "period_sequence_evidence_table",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column"
        ],
        "optional_parameters": [
          "period_column",
          "baseline_period",
          "comparison_period",
          "comparison_basis",
          "filters",
          "population_preparation",
          "period_grain",
          "max_rows",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "date_column",
          "period_column",
          "comparison_basis",
          "period_grain",
          "max_rows",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "png",
              "html",
              "csv"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "object_type": "table",
        "table_spec_names": [
          "time_series_table"
        ],
        "visual_family": "reporting_table",
        "selection_guidance": {
          "use_when": "Use for a compact sales-report table where each row is an ordered time bucket and the reader needs exact baseline, comparison, absolute variance, and relative variance values.",
          "avoid_when": "Do not use for a single before/after entity ranking or total comparison; use the comparison table for that.",
          "prefer_when": [
            "The request asks for period-by-period evidence and a chart would obscure the exact values.",
            "The report needs a small chronological table for month, quarter, year, YTD, or rolling-window rows.",
            "The narrative needs exact changes across time without introducing a plot."
          ]
        },
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 0,
          "uses_internal_time_axis": true,
          "slots": []
        },
        "native_table_contract": {
          "table_key": "time_series_table",
          "renderer": "native_reporting_table",
          "row_grain": "One row per resolved time bucket, typically month, quarter, or year depending on the requested period_grain.",
          "columns": [
            {
              "key": "row_label",
              "label": "Period",
              "role": "time_row_label",
              "alignment": "left"
            },
            {
              "key": "baseline_value",
              "label": "Baseline",
              "role": "scenario_value",
              "alignment": "numeric"
            },
            {
              "key": "comparison_value",
              "label": "Comparison",
              "role": "scenario_value",
              "alignment": "numeric"
            },
            {
              "key": "absolute_variance",
              "label": "Delta",
              "role": "absolute_variance",
              "alignment": "numeric",
              "signed": true
            },
            {
              "key": "relative_variance",
              "label": "Delta %",
              "role": "relative_variance",
              "alignment": "numeric",
              "signed": true
            }
          ],
          "style_rules": [
            "Keep time rows in chronological order unless an explicit sort_by requests a variance ranking.",
            "Use compact scenario columns and signed variance columns rather than raw data dumps.",
            "Align numeric values by decimal position and keep units in headers or subtitle.",
            "Use restrained in-cell variance markers only when they improve scanability."
          ],
          "reference_family": "reporting_table"
        },
        "orchestrator_request_contract": {
          "deterministic_entry_point": "plugins/period-comparison/scripts/period_core.py::run_period_comparison",
          "call_boundary": "The orchestrator supplies the required and optional request parameters; the period-comparison plugin owns data preparation, comparison validation, table rendering, artifact identity, and manifest output.",
          "required_parameters": [
            "source_file",
            "metric",
            "date_column"
          ],
          "optional_parameters": [
            "period_column",
            "baseline_period",
            "comparison_period",
            "comparison_basis",
            "filters",
            "population_preparation",
            "period_grain",
            "max_rows",
            "analysis_scope"
          ],
          "result_artifact_fields": [
            "artifact_id",
            "kind",
            "capability_id",
            "table_key",
            "table_spec_name",
            "resolved_parameters",
            "table_definition_hash",
            "path"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_by_recency_window",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_by_period.html",
      "output": "period__year_over_year_by_period.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 30986,
        "non_white_ratio": 0.008250793650793651,
        "edge_ink_ratio": 0.012221248417567436,
        "crop_risk_ink_ratio": 0.0004347826086956522,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0011111111111111111,
        "bottom_edge_ink_ratio": 0.02873015873015873,
        "left_edge_ink_ratio": 0.01617283950617284
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.by_period",
        "grammar": "period_comparison.by_period",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:0eb9b..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_by_period.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.by_period",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare one metric between baseline and comparison periods using the legacy by-period comparison grammar.",
        "evidence_role": "period_movement_by_period",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "date_column",
          "dimensions",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_by_period",
          "year_over_year_by_period_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "series_or_group_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "trendComparisonByPeriodChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_actual_vs_previous_year_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:trendComparisonByPeriodChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or selected dimension",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_by_recency_window_small_multiples",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_by_period_small_multiples.html",
      "output": "period__year_over_year_by_period_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2220,
        "height": 1300
      },
      "stats": {
        "byte_count": 53417,
        "non_white_ratio": 0.00958974358974359,
        "edge_ink_ratio": 0.002718946765884373,
        "crop_risk_ink_ratio": 0.0005681818181818182,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0015384615384615385,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.013076923076923076
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.by_period",
        "grammar": "period_comparison.by_period",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:6f550..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_by_period_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.by_period",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare one metric between baseline and comparison periods using the legacy by-period comparison grammar.",
        "evidence_role": "period_movement_by_period",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "date_column",
          "dimensions",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_by_period",
          "year_over_year_by_period_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "series_or_group_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "trendComparisonByPeriodChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_actual_vs_previous_year_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:trendComparisonByPeriodChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or selected dimension",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_column",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_column.html",
      "output": "period__year_over_year_column.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 30696,
        "non_white_ratio": 0.15500317460317461,
        "edge_ink_ratio": 0.019768234492160874,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.05182539682539682,
        "left_edge_ink_ratio": 0.01962962962962963
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.multitier_column",
        "grammar": "period_comparison.multitier_column",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": "0.048, 0.68",
        "identity_hash": "chartdef:v2:sha256:ce60b..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_column.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.multitier_column",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare current and previous periods with the legacy multitier column grammar.",
        "evidence_role": "period_movement_column",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "period_column",
          "dimensions",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_column",
          "year_over_year_column_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "hierarchy_or_series_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "multitierColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_multitier_column_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:multitierColumnChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_column_small_multiples",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_column_small_multiples.html",
      "output": "period__year_over_year_column_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2220,
        "height": 1300
      },
      "stats": {
        "byte_count": 46267,
        "non_white_ratio": 0.08713409563409563,
        "edge_ink_ratio": 0.007122099423187002,
        "crop_risk_ink_ratio": 0.010423951048951049,
        "top_edge_ink_ratio": 0.01652806652806653,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.014733727810650887
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.multitier_column",
        "grammar": "period_comparison.multitier_column",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": "0.68",
        "identity_hash": "chartdef:v2:sha256:c7bba..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_column_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.multitier_column",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare current and previous periods with the legacy multitier column grammar.",
        "evidence_role": "period_movement_column",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "period_column",
          "dimensions",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_column",
          "year_over_year_column_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "hierarchy_or_series_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "multitierColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_multitier_column_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:multitierColumnChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_line",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_line.html",
      "output": "period__year_over_year_line.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 46023,
        "non_white_ratio": 0.017904761904761906,
        "edge_ink_ratio": 0.02057162333235953,
        "crop_risk_ink_ratio": 0.0004347826086956522,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0011111111111111111,
        "bottom_edge_ink_ratio": 0.05611111111111111,
        "left_edge_ink_ratio": 0.015925925925925927
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.trend",
        "grammar": "period_comparison.trend",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:fd045..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_line.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.trend",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show a metric over ordered periods or dates using the legacy trend comparison grammar.",
        "evidence_role": "trend",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column"
        ],
        "optional_parameters": [
          "period_column",
          "dimensions",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_line",
          "year_over_year_line_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "series_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "trendComparisonChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_trend_comparison_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:trendComparisonChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "resolved comparison periods",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or selected dimension",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_small_multiples",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_small_multiples.html",
      "output": "period__year_over_year_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2220,
        "height": 1300
      },
      "stats": {
        "byte_count": 65086,
        "non_white_ratio": 0.01252841302841303,
        "edge_ink_ratio": 0.0027409625291708864,
        "crop_risk_ink_ratio": 0.0005681818181818182,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0015384615384615385,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.01319526627218935
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.by_period",
        "grammar": "period_comparison.by_period",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:25029..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../period/period/year_over_year_small_multiples_context.json"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.by_period",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare one metric between baseline and comparison periods using the legacy by-period comparison grammar.",
        "evidence_role": "period_movement_by_period",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "date_column",
          "dimensions",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_by_period",
          "year_over_year_by_period_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "series_or_group_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "trendComparisonByPeriodChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_actual_vs_previous_year_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:trendComparisonByPeriodChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or selected dimension",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_waterfall",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_waterfall.html",
      "output": "period__year_over_year_waterfall.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 29544,
        "non_white_ratio": 0.16373888888888888,
        "edge_ink_ratio": 0.016359918200409,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.04341269841269841,
        "left_edge_ink_ratio": 0.015432098765432098
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.horizontal_waterfall",
        "grammar": "period_comparison.horizontal_waterfall",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": "0.048, 0.68",
        "identity_hash": "chartdef:v2:sha256:1b74c..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_waterfall.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.horizontal_waterfall",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Explain baseline-to-comparison movement using the legacy horizontal waterfall grammar.",
        "evidence_role": "period_movement_bridge",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "date_column",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_waterfall",
          "year_over_year_waterfall_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "contribution_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "horizontalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_horizontal_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:horizontalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesWaterfall": "derived from panel_dimension",
            "varianceAggregation": "movement aggregation mode",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "varianceAggregation",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_waterfall_small_multiples",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_waterfall_small_multiples.html",
      "output": "period__year_over_year_waterfall_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2220,
        "height": 1300
      },
      "stats": {
        "byte_count": 52774,
        "non_white_ratio": 0.05831288981288981,
        "edge_ink_ratio": 0.01804191801329752,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.09698224852071007
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.horizontal_waterfall",
        "grammar": "period_comparison.horizontal_waterfall",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": "0.68",
        "identity_hash": "chartdef:v2:sha256:fc20d..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_waterfall_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.horizontal_waterfall",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Explain baseline-to-comparison movement using the legacy horizontal waterfall grammar.",
        "evidence_role": "period_movement_bridge",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "date_column",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_waterfall",
          "year_over_year_waterfall_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "contribution_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "horizontalWaterfallChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_horizontal_waterfall_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:horizontalWaterfallChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesWaterfall": "derived from panel_dimension",
            "varianceAggregation": "movement aggregation mode",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "varianceAggregation",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_dot",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_dot.html",
      "output": "period__year_over_year_dot.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 44403,
        "non_white_ratio": 0.011895238095238096,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.dot",
        "grammar": "period_comparison.dot",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:39269..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_dot.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.dot",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare baseline and comparison values using the legacy dot-chart grammar.",
        "evidence_role": "period_movement_dot",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "date_column",
          "comparison_basis",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_dot"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "comparison_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "dotChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_dot_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:dotChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "xAxisDimension": "observation/comparison dimension",
            "yAxisDimension": "color/group dimension or nothingFilteredName",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "xAxisDimension",
            "yAxisDimension",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_dot_small_multiples",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_dot_small_multiples.html",
      "output": "period__year_over_year_dot_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2600,
        "height": 780
      },
      "stats": {
        "byte_count": 74391,
        "non_white_ratio": 0.014044871794871796,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.dot",
        "grammar": "period_comparison.dot",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:41404..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_dot_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.dot",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare baseline and comparison values using the legacy dot-chart grammar.",
        "evidence_role": "period_movement_dot",
        "required_parameters": [
          "source_file",
          "metric",
          "period_column",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "date_column",
          "comparison_basis",
          "panel_dimension",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_dot",
          "year_over_year_dot_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "comparison_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "dotChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_dot_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:dotChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "xAxisDimension": "observation/comparison dimension",
            "yAxisDimension": "color/group dimension or nothingFilteredName",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "xAxisDimension",
            "yAxisDimension",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_slope",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_slope.html",
      "output": "period__year_over_year_slope.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 760,
        "height": 620
      },
      "stats": {
        "byte_count": 14981,
        "non_white_ratio": 0.016793293718166385,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.slope",
        "grammar": "period_comparison.slope",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:9791f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_slope.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.slope",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare current and previous periods with the legacy slope-chart grammar.",
        "evidence_role": "period_movement_slope",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_slope",
          "year_over_year_slope_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "comparison_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "slopeChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_slope_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:slopeChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or selected dimension",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "period / year_over_year_slope_small_multiples",
      "plugin_source": "period-comparison",
      "plugin_source_label": "Period Comparison",
      "source": "../period/period/year_over_year_slope_small_multiples.html",
      "output": "period__year_over_year_slope_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1360,
        "height": 560
      },
      "stats": {
        "byte_count": 25446,
        "non_white_ratio": 0.011383928571428571,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "period_comparison.slope",
        "grammar": "period_comparison.slope",
        "metrics": "Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:ddb9c..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../period/period/year_over_year_slope_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../period/period/evidence_pack/contexts/period_comparison_context.json"
        },
        {
          "label": "data",
          "href": "../period/period/period_comparison_by_period.csv"
        },
        {
          "label": "manifest",
          "href": "../period/period/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../period/period/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "period_comparison.slope",
        "plugin": "period-comparison",
        "catalog_path": "plugins/period-comparison/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare current and previous periods with the legacy slope-chart grammar.",
        "evidence_role": "period_movement_slope",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column",
          "baseline_period",
          "comparison_period",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "comparison_basis",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "year_over_year_slope",
          "year_over_year_slope_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "comparison_dimensions",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "slopeChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_slope_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:slopeChart",
            "metricsToPlot": "metric as single-item list",
            "selectedPeriods": "[baseline_period, comparison_period]",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or selected dimension",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / bar",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/bar.html",
      "output": "mix_comparison__bar.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1051,
        "height": 400
      },
      "stats": {
        "byte_count": 24560,
        "non_white_ratio": 0.18597050428163653,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.bar",
        "grammar": "stacked bar",
        "metrics": "Sales",
        "dimensions": "Brand",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:de8d5..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/bar.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/bar_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/bar_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show a single primary metric by one row dimension using the legacy horizontal bar grammar with no overlay marker.",
        "evidence_role": "plain_bar",
        "required_parameters": [
          "source_file",
          "metric",
          "row_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "row_dimension",
          "selected_periods",
          "filters",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "bar",
          "bar_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "row",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_bar_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedBarChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotOverlayChart": "constant:false",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "plotOverlayChart",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / bar_small_multiples",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/bar_small_multiples.html",
      "output": "mix_comparison__bar_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1576,
        "height": 676
      },
      "stats": {
        "byte_count": 60809,
        "non_white_ratio": 0.08506480341212867,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.bar",
        "grammar": "stacked bar",
        "metrics": "Sales",
        "dimensions": "Brand, Channel",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:c84e9..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/bar_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/bar_small_multiples_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/bar_small_multiples_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show a single primary metric by one row dimension using the legacy horizontal bar grammar with no overlay marker.",
        "evidence_role": "plain_bar",
        "required_parameters": [
          "source_file",
          "metric",
          "row_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "row_dimension",
          "selected_periods",
          "filters",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "bar",
          "bar_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "row",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_bar_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedBarChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotOverlayChart": "constant:false",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "plotOverlayChart",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / related_metrics_bar",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/related_metrics_bar.html",
      "output": "mix_comparison__related_metrics_bar.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1051,
        "height": 400
      },
      "stats": {
        "byte_count": 32698,
        "non_white_ratio": 0.17664129400570885,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_bar_overlay",
        "grammar": "stacked bar",
        "metrics": "Sales, Sales Growth Rate",
        "dimensions": "Brand",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:38a9e..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/related_metrics_bar.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/related_metrics_bar_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/related_metrics_bar_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_bar_overlay",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the legacy overlay chart with a primary bar metric and a second related marker metric.",
        "evidence_role": "related_metric_overlay",
        "required_parameters": [
          "source_file",
          "metric",
          "overlay_metric",
          "row_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "overlay_metric",
          "row_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "related_metrics_bar",
          "related_metrics_bar_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true,
            "blocked_value_types": [
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "unit_rate",
              "per_unit"
            ],
            "blocked_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "margin_rate",
              "margin_percent",
              "margin_percentage",
              "margin_per_unit",
              "unit_rate"
            ]
          },
          "overlay_metric": {
            "numeric": true,
            "required": false
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "row",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_bar_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedBarChart",
            "metricsToPlot": "[metric, overlay_metric]",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "plotOverlayChart": "constant:true",
            "overlayChartMetric": "overlay_metric after legacy preparation",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "plotOverlayChart",
            "overlayChartMetric",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ],
          "notes": "The current plugin artifact names keep related_metrics_bar for backward compatibility; the legacy control is plotOverlayChart."
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / related_metrics_bar_small_multiples",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/related_metrics_bar_small_multiples.html",
      "output": "mix_comparison__related_metrics_bar_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1576,
        "height": 676
      },
      "stats": {
        "byte_count": 74810,
        "non_white_ratio": 0.08450068332682546,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_bar_overlay",
        "grammar": "stacked bar",
        "metrics": "Sales, Sales Growth Rate",
        "dimensions": "Brand, Channel",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:07f01..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/related_metrics_bar_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/related_metrics_bar_small_multiples_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/related_metrics_bar_small_multiples_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_bar_overlay",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the legacy overlay chart with a primary bar metric and a second related marker metric.",
        "evidence_role": "related_metric_overlay",
        "required_parameters": [
          "source_file",
          "metric",
          "overlay_metric",
          "row_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "overlay_metric",
          "row_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "related_metrics_bar",
          "related_metrics_bar_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true,
            "blocked_value_types": [
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "unit_rate",
              "per_unit"
            ],
            "blocked_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "margin_rate",
              "margin_percent",
              "margin_percentage",
              "margin_per_unit",
              "unit_rate"
            ]
          },
          "overlay_metric": {
            "numeric": true,
            "required": false
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "row",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_bar_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedBarChart",
            "metricsToPlot": "[metric, overlay_metric]",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "plotOverlayChart": "constant:true",
            "overlayChartMetric": "overlay_metric after legacy preparation",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "plotOverlayChart",
            "overlayChartMetric",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ],
          "notes": "The current plugin artifact names keep related_metrics_bar for backward compatibility; the legacy control is plotOverlayChart."
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / multitier_bar",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/multitier_bar.html",
      "output": "mix_comparison__multitier_bar.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2600,
        "height": 780
      },
      "stats": {
        "byte_count": 32337,
        "non_white_ratio": 0.06684960552268245,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.multitier_bar",
        "grammar": "multitier_bar",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.1, 0.68",
        "identity_hash": "chartdef:v2:sha256:49cb7..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/multitier_bar.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/multitier_bar_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/multitier_bar_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.multitier_bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show nested contribution across two or more dimensions using the legacy multitier-bar grammar.",
        "evidence_role": "hierarchical_composition",
        "required_parameters": [
          "source_file",
          "metric",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "multitier_bar",
          "multitier_bar_dimension_panels"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "hierarchy_dimensions",
              "required": true,
              "visual": true,
              "min_items": 2,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "multitierBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_multitier_bar_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:multitierBarChart",
            "metricsToPlot": "metric as single-item list",
            "selectDimensionsToPlot": "dimensions",
            "xAxisDimension": "primary hierarchy dimension",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectDimensionsToPlot",
            "xAxisDimension",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / multitier_bar_dimension_panels",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/multitier_bar_dimension_panels.html",
      "output": "mix_comparison__multitier_bar_dimension_panels.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1299,
        "height": 734
      },
      "stats": {
        "byte_count": 72423,
        "non_white_ratio": 0.05689243245170777,
        "edge_ink_ratio": 0.0029010118163164227,
        "crop_risk_ink_ratio": 0.005762068723209894,
        "top_edge_ink_ratio": 0.009017925877048279,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.multitier_bar",
        "grammar": "mix.multitier_bar",
        "metrics": "Sales",
        "dimensions": null,
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.68",
        "identity_hash": "chartdef:v2:sha256:afa87..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/multitier_bar_dimension_panels.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.multitier_bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show nested contribution across two or more dimensions using the legacy multitier-bar grammar.",
        "evidence_role": "hierarchical_composition",
        "required_parameters": [
          "source_file",
          "metric",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "multitier_bar",
          "multitier_bar_dimension_panels"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "hierarchy_dimensions",
              "required": true,
              "visual": true,
              "min_items": 2,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "multitierBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_multitier_bar_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:multitierBarChart",
            "metricsToPlot": "metric as single-item list",
            "selectDimensionsToPlot": "dimensions",
            "xAxisDimension": "primary hierarchy dimension",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectDimensionsToPlot",
            "xAxisDimension",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / multitier_bar_two_dimension",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison/multitier_bar_two_dimension.html",
      "output": "mix_comparison__multitier_bar_two_dimension.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1228,
        "height": 539
      },
      "stats": {
        "byte_count": 40000,
        "non_white_ratio": 0.059742374888954695,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.multitier_bar",
        "grammar": "mix.multitier_bar",
        "metrics": "Sales",
        "dimensions": "Brand, Channel",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.68",
        "identity_hash": "chartdef:v2:sha256:27a1d..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison/multitier_bar_two_dimension.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.multitier_bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show nested contribution across two or more dimensions using the legacy multitier-bar grammar.",
        "evidence_role": "hierarchical_composition",
        "required_parameters": [
          "source_file",
          "metric",
          "dimensions"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "multitier_bar",
          "multitier_bar_dimension_panels"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "hierarchy_dimensions",
              "required": true,
              "visual": true,
              "min_items": 2,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "multitierBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_multitier_bar_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:multitierBarChart",
            "metricsToPlot": "metric as single-item list",
            "selectDimensionsToPlot": "dimensions",
            "xAxisDimension": "primary hierarchy dimension",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectDimensionsToPlot",
            "xAxisDimension",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / stacked_bar",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/stacked_bar.html",
      "output": "mix_current__stacked_bar.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1051,
        "height": 530
      },
      "stats": {
        "byte_count": 41668,
        "non_white_ratio": 0.07895265964131196,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_bar",
        "grammar": "stacked bar",
        "metrics": "Sales",
        "dimensions": "Company, Channel",
        "periods": "AC",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:8edd6..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/stacked_bar.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/stacked_bar_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/stacked_bar_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show composition of a metric by row and stack dimensions using the legacy stacked-bar grammar.",
        "evidence_role": "composition_stacked_bar",
        "required_parameters": [
          "source_file",
          "metric",
          "row_dimension",
          "stack_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "row_dimension",
          "stack_dimension",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "stacked_bar",
          "stacked_bar_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "row",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "stack",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_bar_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedBarChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "stack_dimension",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "highlightedDimension": "focus_item as single-item list when resolved for stack_dimension",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "likeForLikeScope": "population_preparation.like_for_like.period_scope",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension",
            "lostAndDroppedColumn": "population_preparation.cohort_tagging.entity_dimension for lost/new grouping"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "xAxisDimension",
            "yAxisDimension",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "likeForLikeScope",
            "chosenCohortColumn",
            "lostAndDroppedColumn",
            "smallMultiplesColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / stacked_bar_small_multiples",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/stacked_bar_small_multiples.html",
      "output": "mix_current__stacked_bar_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2220,
        "height": 1380
      },
      "stats": {
        "byte_count": 74950,
        "non_white_ratio": 0.02517756887322105,
        "edge_ink_ratio": 0.0051762730833799665,
        "crop_risk_ink_ratio": 0.010235042735042735,
        "top_edge_ink_ratio": 0.016597366597366596,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.00011148272017837236
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_bar",
        "grammar": "stacked bar",
        "metrics": "Sales",
        "dimensions": "Company, Channel, Type",
        "periods": "AC",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:34de7..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/stacked_bar_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/stacked_bar_small_multiples_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/stacked_bar_small_multiples_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_bar",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show composition of a metric by row and stack dimensions using the legacy stacked-bar grammar.",
        "evidence_role": "composition_stacked_bar",
        "required_parameters": [
          "source_file",
          "metric",
          "row_dimension",
          "stack_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "row_dimension",
          "stack_dimension",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "stacked_bar",
          "stacked_bar_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "row",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "stack",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedBarChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_bar_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedBarChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "stack_dimension",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "highlightedDimension": "focus_item as single-item list when resolved for stack_dimension",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "likeForLikeScope": "population_preparation.like_for_like.period_scope",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension",
            "lostAndDroppedColumn": "population_preparation.cohort_tagging.entity_dimension for lost/new grouping"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "xAxisDimension",
            "yAxisDimension",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "likeForLikeScope",
            "chosenCohortColumn",
            "lostAndDroppedColumn",
            "smallMultiplesColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / column_total",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison_column_total/column_total.html",
      "output": "mix_comparison__column_total.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 450,
        "height": 650
      },
      "stats": {
        "byte_count": 11342,
        "non_white_ratio": 0.15317606837606837,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Total View",
        "periods": "_Aug-2016, _Aug-2017,      ",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:6bb65..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison_column_total/column_total.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison_column_total/column_total_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison_column_total/column_total_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison_column_total/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison_column_total/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show total metric columns across selected periods using the legacy stacked-column renderer with no stack dimension.",
        "evidence_role": "total_column",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "period_grain",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "selected_periods",
          "period_grain",
          "filters",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "column_total"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 0,
          "uses_internal_total_dimension": true,
          "slots": []
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "adapter constant dimension Total View",
            "selectDimensionsToPlot": "adapter constant dimension Total View",
            "selectedPeriods": "selected_periods",
            "datePeriodName": "period_grain",
            "showCAGR": "resolved true when metric is CAGR-eligible",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "datePeriodName",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / column_total_with_overlay",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_comparison_column_total/column_total_with_overlay.html",
      "output": "mix_comparison__column_total_with_overlay.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 450,
        "height": 650
      },
      "stats": {
        "byte_count": 13169,
        "non_white_ratio": 0.15521709401709402,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.column_overlay",
        "grammar": "stacked column",
        "metrics": "Sales, Units",
        "dimensions": "Total View",
        "periods": "_Aug-2016, _Aug-2017,      ",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:cd567..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_comparison_column_total/column_total_with_overlay.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_comparison_column_total/column_total_with_overlay_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_comparison_column_total/column_total_with_overlay_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_comparison_column_total/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_comparison_column_total/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.column_overlay",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show total metric columns with a related metric overlay using the legacy stacked-column overlay path.",
        "evidence_role": "total_column_overlay",
        "required_parameters": [
          "source_file",
          "metric",
          "overlay_metric"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "period_grain",
          "filters",
          "population_preparation",
          "show_cagr",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "overlay_metric",
          "selected_periods",
          "period_grain",
          "filters",
          "show_cagr",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "column_total_with_overlay"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true,
            "blocked_value_types": [
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "unit_rate",
              "per_unit"
            ],
            "blocked_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "margin_rate",
              "margin_percent",
              "margin_percentage",
              "margin_per_unit",
              "unit_rate"
            ]
          },
          "overlay_metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 0,
          "uses_internal_total_dimension": true,
          "slots": []
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "[metric, overlay_metric]",
            "xAxisDimension": "adapter constant dimension Total View",
            "selectDimensionsToPlot": "adapter constant dimension Total View",
            "selectedPeriods": "selected_periods",
            "datePeriodName": "period_grain",
            "plotOverlayChart": "constant:true",
            "overlayChartMetric": "overlay_metric",
            "showCAGR": "show_cagr",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "datePeriodName",
            "plotOverlayChart",
            "overlayChartMetric",
            "showCAGR",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_like_for_like / like_for_like_column_total",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_like_for_like/mix_like_for_like/like_for_like_column_total.html",
      "output": "mix_like_for_like__like_for_like_column_total.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 450,
        "height": 650
      },
      "stats": {
        "byte_count": 13036,
        "non_white_ratio": 0.1556957264957265,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.like_for_like_column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Total View",
        "periods": "_Aug-2016, _Aug-2017,      ",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:290d7..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_like_for_like/mix_like_for_like/like_for_like_column_total.html"
        },
        {
          "label": "context",
          "href": "../mix_like_for_like/mix_like_for_like/like_for_like_column_total_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_like_for_like/mix_like_for_like/like_for_like_column_total_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_like_for_like/mix_like_for_like/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_like_for_like/mix_like_for_like/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.like_for_like_column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Apply deterministic like-for-like population preparation, then show total metric columns with the legacy stacked-column renderer.",
        "evidence_role": "like_for_like_total_column",
        "required_parameters": [
          "source_file",
          "metric",
          "entity_dimension",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "period_grain",
          "filters",
          "show_cagr",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "entity_dimension",
          "selected_periods",
          "period_grain",
          "filters",
          "show_cagr",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "like_for_like_column_total"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 0,
          "uses_internal_total_dimension": true,
          "slots": [
            {
              "parameter": "entity_dimension",
              "role": "like_for_like_entity",
              "required": true,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "adapter constant dimension Total View",
            "selectDimensionsToPlot": "adapter constant dimension Total View",
            "selectedPeriods": "selected_periods",
            "datePeriodName": "period_grain",
            "likeForLikeName": "constant:true",
            "likeForLikeScope": "population_preparation.like_for_like.period_scope",
            "chosenCohortColumn": "entity_dimension",
            "showCAGR": "show_cagr",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "datePeriodName",
            "likeForLikeName",
            "likeForLikeScope",
            "chosenCohortColumn",
            "showCAGR",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / stacked_column",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_regular/stacked_column.html",
      "output": "mix_comparison__stacked_column.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 450,
        "height": 650
      },
      "stats": {
        "byte_count": 24370,
        "non_white_ratio": 0.16415726495726496,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "_Aug-2016, _Aug-2017,      ",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:10e27..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_regular/stacked_column.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_regular/stacked_column_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_regular/stacked_column_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show composition across periods/categories using the legacy stacked-column grammar; synthesis and CAGR are modes of the same chart grammar.",
        "evidence_role": "composition_stacked_column",
        "required_parameters": [
          "source_file",
          "metric",
          "category_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "period_grain",
          "value_mode",
          "synthesis_mode",
          "filters",
          "population_preparation",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "category_dimension",
          "selected_periods",
          "period_grain",
          "value_mode",
          "synthesis_mode",
          "filters",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "stacked_column",
          "stacked_column_synthesis"
        ],
        "preferred_chart_spec_name": "stacked_column",
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "category_dimension",
              "role": "stack_category",
              "required": true,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "category_dimension",
            "selectDimensionsToPlot": "dimensions/category_dimension",
            "selectedPeriods": "selected_periods",
            "datePeriodName": "period_grain",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "synthesisPlot": "synthesis_mode",
            "highlightedDimension": "focus_item as single-item list when resolved for category_dimension",
            "showCAGR": "adapter auto true only when metric supports CAGR; not identity",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "datePeriodName",
            "plotValuesAsChoice",
            "synthesisPlot",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        },
        "render_variants": [
          {
            "chart_spec_name": "stacked_column",
            "evidence_identity": "canonical_stacked_column_with_metric_valid_cagr_annotation",
            "expose_to_orchestrator": true,
            "preferred": true
          },
          {
            "chart_spec_name": "stacked_column_synthesis",
            "evidence_identity": "separate_synthesis_mode",
            "expose_to_orchestrator": true
          }
        ]
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_like_for_like / like_for_like_stacked_column",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_like_for_like/mix_like_for_like/like_for_like_stacked_column.html",
      "output": "mix_like_for_like__like_for_like_stacked_column.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 450,
        "height": 650
      },
      "stats": {
        "byte_count": 26115,
        "non_white_ratio": 0.16677264957264956,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.like_for_like_stacked_column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "_Aug-2016, _Aug-2017,      ",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:ae11b..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_like_for_like/mix_like_for_like/like_for_like_stacked_column.html"
        },
        {
          "label": "context",
          "href": "../mix_like_for_like/mix_like_for_like/like_for_like_stacked_column_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_like_for_like/mix_like_for_like/like_for_like_stacked_column_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_like_for_like/mix_like_for_like/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_like_for_like/mix_like_for_like/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.like_for_like_stacked_column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Apply deterministic like-for-like population preparation, then show composition with the legacy stacked-column grammar.",
        "evidence_role": "like_for_like_stacked_column",
        "required_parameters": [
          "source_file",
          "metric",
          "entity_dimension",
          "category_dimension",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "period_grain",
          "filters",
          "show_cagr",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "entity_dimension",
          "category_dimension",
          "selected_periods",
          "period_grain",
          "filters",
          "show_cagr",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "like_for_like_stacked_column"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "category_dimension",
              "role": "stack_category",
              "required": true,
              "visual": true
            },
            {
              "parameter": "entity_dimension",
              "role": "like_for_like_entity",
              "required": true,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "category_dimension",
            "selectDimensionsToPlot": "dimensions/category_dimension",
            "selectedPeriods": "selected_periods",
            "datePeriodName": "period_grain",
            "likeForLikeName": "constant:true",
            "likeForLikeScope": "population_preparation.like_for_like.period_scope",
            "chosenCohortColumn": "entity_dimension",
            "showCAGR": "show_cagr",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "datePeriodName",
            "likeForLikeName",
            "likeForLikeScope",
            "chosenCohortColumn",
            "showCAGR",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / stacked_column_synthesis",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_regular/stacked_column_synthesis.html",
      "output": "mix_comparison__stacked_column_synthesis.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1052,
        "height": 650
      },
      "stats": {
        "byte_count": 46231,
        "non_white_ratio": 0.5294194208832992,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "_Aug-2016, _Aug-2017",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:78f61..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_regular/stacked_column_synthesis.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_regular/stacked_column_synthesis_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_regular/stacked_column_synthesis_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show composition across periods/categories using the legacy stacked-column grammar; synthesis and CAGR are modes of the same chart grammar.",
        "evidence_role": "composition_stacked_column",
        "required_parameters": [
          "source_file",
          "metric",
          "category_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "period_grain",
          "value_mode",
          "synthesis_mode",
          "filters",
          "population_preparation",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "category_dimension",
          "selected_periods",
          "period_grain",
          "value_mode",
          "synthesis_mode",
          "filters",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "stacked_column",
          "stacked_column_synthesis"
        ],
        "preferred_chart_spec_name": "stacked_column",
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "category_dimension",
              "role": "stack_category",
              "required": true,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "category_dimension",
            "selectDimensionsToPlot": "dimensions/category_dimension",
            "selectedPeriods": "selected_periods",
            "datePeriodName": "period_grain",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "synthesisPlot": "synthesis_mode",
            "highlightedDimension": "focus_item as single-item list when resolved for category_dimension",
            "showCAGR": "adapter auto true only when metric supports CAGR; not identity",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "datePeriodName",
            "plotValuesAsChoice",
            "synthesisPlot",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        },
        "render_variants": [
          {
            "chart_spec_name": "stacked_column",
            "evidence_identity": "canonical_stacked_column_with_metric_valid_cagr_annotation",
            "expose_to_orchestrator": true,
            "preferred": true
          },
          {
            "chart_spec_name": "stacked_column_synthesis",
            "evidence_identity": "separate_synthesis_mode",
            "expose_to_orchestrator": true
          }
        ]
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_cohort / cohort_since_stacked_column",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_cohort/mix_cohort/cohort_since_stacked_column.html",
      "output": "mix_cohort__cohort_since_stacked_column.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 480,
        "height": 650
      },
      "stats": {
        "byte_count": 13982,
        "non_white_ratio": 0.16651282051282051,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.cohort_since_stacked_column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Period, Barcode_Since",
        "periods": "2015, 2016, 2017",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:0f109..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_cohort/mix_cohort/cohort_since_stacked_column.html"
        },
        {
          "label": "context",
          "href": "../mix_cohort/mix_cohort/cohort_since_stacked_column_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_cohort/mix_cohort/cohort_since_stacked_column_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_cohort/mix_cohort/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_cohort/mix_cohort/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.cohort_since_stacked_column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show current-period value as a legacy stacked column split by deterministic since cohort.",
        "evidence_role": "cohort_since_composition",
        "required_parameters": [
          "source_file",
          "metric",
          "source_dimension",
          "period_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "filters",
          "selected_periods",
          "population_preparation",
          "show_cagr",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "source_dimension",
          "show_cagr",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "cohort_since_stacked_column",
          "cohort_since_stacked_bar"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "source_dimension",
              "role": "source_for_derived_since_stack_dimension",
              "required": true,
              "visual": true,
              "derived": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "selectDimensionsToPlot": "derived since cohort dimension",
            "selectedPeriods": "comparison/current period for cohort kind",
            "chosenCohortColumn": "source_dimension",
            "smallMultiplesColumn": "nothingFilteredName",
            "plotValuesAsChoice": "value_mode or absolute",
            "showCAGR": "show_cagr",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "chosenCohortColumn",
            "plotValuesAsChoice",
            "showCAGR",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_cohort / cohort_lost_stacked_column",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_cohort/mix_cohort/cohort_lost_stacked_column.html",
      "output": "mix_cohort__cohort_lost_stacked_column.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 480,
        "height": 650
      },
      "stats": {
        "byte_count": 11230,
        "non_white_ratio": 0.16407371794871795,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.cohort_lost_stacked_column",
        "grammar": "stacked column",
        "metrics": "Sales",
        "dimensions": "Period, Barcode_Lost",
        "periods": "2015, 2016, 2017",
        "trace_widths": "0.8",
        "identity_hash": "chartdef:v2:sha256:43e5f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_cohort/mix_cohort/cohort_lost_stacked_column.html"
        },
        {
          "label": "context",
          "href": "../mix_cohort/mix_cohort/cohort_lost_stacked_column_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_cohort/mix_cohort/cohort_lost_stacked_column_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_cohort/mix_cohort/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_cohort/mix_cohort/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.cohort_lost_stacked_column",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show previous-period value as a legacy stacked column split by deterministic lost cohort.",
        "evidence_role": "cohort_lost_composition",
        "required_parameters": [
          "source_file",
          "metric",
          "source_dimension",
          "period_column",
          "baseline_period",
          "comparison_period"
        ],
        "optional_parameters": [
          "filters",
          "selected_periods",
          "population_preparation",
          "show_cagr",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "source_dimension",
          "show_cagr",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "cohort_lost_stacked_column",
          "cohort_lost_stacked_bar"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "source_dimension",
              "role": "source_for_derived_lost_stack_dimension",
              "required": true,
              "visual": true,
              "derived": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedColumnChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_column_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedColumnChart",
            "metricsToPlot": "metric as single-item list",
            "selectDimensionsToPlot": "derived lost cohort dimension",
            "selectedPeriods": "baseline/comparison period for cohort kind",
            "lostAndDroppedColumn": "source_dimension",
            "smallMultiplesColumn": "nothingFilteredName",
            "plotValuesAsChoice": "value_mode or absolute",
            "showCAGR": "show_cagr",
            "filterDictName": "filters translated by recipe_filters"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectDimensionsToPlot",
            "selectedPeriods",
            "lostAndDroppedColumn",
            "plotValuesAsChoice",
            "showCAGR",
            "filterDictName"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / line",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_regular/line.html",
      "output": "mix_comparison__line.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 809,
        "height": 530
      },
      "stats": {
        "byte_count": 26301,
        "non_white_ratio": 0.020491172423443803,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.timeline",
        "grammar": "mix.timeline",
        "metrics": "Sales",
        "dimensions": null,
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:62678..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_regular/line.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.timeline",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show one or more metrics over time using the legacy timeline chart grammar.",
        "evidence_role": "line_trend",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "dimensions",
          "filters",
          "population_preparation",
          "panel_dimension",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "line",
          "line_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "series_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "timelineChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_timeline_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:timelineChart",
            "metricsToPlot": "metric as single-item list or metric list",
            "selectedPeriods": "selected_periods",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "highlightedDimension": "focus_item as single-item list when resolved for focus_dimension or active dimensions[0]",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / line_small_multiples",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_regular/line_small_multiples.html",
      "output": "mix_comparison__line_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2220,
        "height": 1820
      },
      "stats": {
        "byte_count": 106890,
        "non_white_ratio": 0.009433224433224432,
        "edge_ink_ratio": 0.003323065823065823,
        "crop_risk_ink_ratio": 0.006586908690869087,
        "top_edge_ink_ratio": 0.011986986986986987,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.timeline",
        "grammar": "mix.timeline",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:de683..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_regular/line_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.timeline",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show one or more metrics over time using the legacy timeline chart grammar.",
        "evidence_role": "line_trend",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "dimensions",
          "filters",
          "population_preparation",
          "panel_dimension",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimensions",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "line",
          "line_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "dimensions",
              "role": "series_dimensions",
              "required": false,
              "visual": true,
              "min_items": 1,
              "max_items": null
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "timelineChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_timeline_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:timelineChart",
            "metricsToPlot": "metric as single-item list or metric list",
            "selectedPeriods": "selected_periods",
            "selectDimensionsToPlot": "dimensions",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "highlightedDimension": "focus_item as single-item list when resolved for focus_dimension or active dimensions[0]",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "selectDimensionsToPlot",
            "smallMultiplesColumn",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / area_absolute",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_regular/area_absolute.html",
      "output": "mix_comparison__area_absolute.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 970,
        "height": 600
      },
      "stats": {
        "byte_count": 101373,
        "non_white_ratio": 0.30499312714776633,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.area",
        "grammar": "mix.area",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:eb797..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_regular/area_absolute.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.area",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show absolute or share development over time using the legacy area-chart grammar.",
        "evidence_role": "area_trend",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column",
          "dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "value_mode",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "area_absolute",
          "area_share"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "dimension",
              "role": "stacked_time_series",
              "required": true,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "areaChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_area_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:areaChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "dimension",
            "selectedPeriods": "selected_periods",
            "plotValuesAsChoice": "value_mode absolute/percent/share",
            "highlightedDimension": "focus_item as single-item list when resolved for dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_comparison / area_share",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_comparison/mix_regular/area_share.html",
      "output": "mix_comparison__area_share.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 970,
        "height": 600
      },
      "stats": {
        "byte_count": 39625,
        "non_white_ratio": 0.45754123711340206,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.area",
        "grammar": "mix.area",
        "metrics": "Sales",
        "dimensions": "Company",
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:1840a..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_comparison/mix_regular/area_share.html"
        },
        {
          "label": "context",
          "href": "../mix_comparison/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_comparison/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_comparison/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_comparison/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.area",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show absolute or share development over time using the legacy area-chart grammar.",
        "evidence_role": "area_trend",
        "required_parameters": [
          "source_file",
          "metric",
          "date_column",
          "dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "value_mode",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "area_absolute",
          "area_share"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "dimension",
              "role": "stacked_time_series",
              "required": true,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "areaChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_area_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:areaChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "dimension",
            "selectedPeriods": "selected_periods",
            "plotValuesAsChoice": "value_mode absolute/percent/share",
            "highlightedDimension": "focus_item as single-item list when resolved for dimension",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / barmekko",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/barmekko.html",
      "output": "mix_current__barmekko.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1052,
        "height": 650
      },
      "stats": {
        "byte_count": 27940,
        "non_white_ratio": 0.17385200350979818,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.barmekko",
        "grammar": "mix.barmekko",
        "metrics": "Unit Price, Units",
        "dimensions": "Company, Channel",
        "periods": "AC",
        "trace_widths": "758695, 2154343, 4131041, 4220396 +2",
        "identity_hash": "chartdef:v2:sha256:358ee..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/barmekko.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.barmekko",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show width-by-metric and stack composition using the legacy BarMekko grammar.",
        "evidence_role": "barmekko_mix",
        "required_parameters": [
          "source_file",
          "metric",
          "width_metric",
          "area_represents",
          "width_dimension",
          "stack_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "width_metric",
          "area_represents",
          "width_dimension",
          "stack_dimension",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "barmekko",
          "barmekko_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "allowed_value_types": [
              "rate",
              "ratio",
              "percentage",
              "percent",
              "unit_rate",
              "per_unit"
            ],
            "allowed_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "margin_rate",
              "margin_percent",
              "margin_percentage",
              "margin_per_unit",
              "unit_rate"
            ],
            "blocked_metric_roles": [
              "amount",
              "value",
              "volume",
              "quantity",
              "count"
            ]
          },
          "width_metric": {
            "numeric": true,
            "additive": true,
            "non_negative": true,
            "allowed_value_types": [
              "amount",
              "currency",
              "value",
              "volume",
              "quantity",
              "count"
            ],
            "allowed_metric_roles": [
              "amount",
              "value",
              "volume",
              "quantity",
              "count"
            ]
          }
        },
        "metric_relationships": [
          {
            "relationship_type": "multiplicative_area",
            "width_metric_field": "width_metric",
            "height_metric_field": "metric",
            "area_label_field": "area_represents"
          }
        ],
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "width_dimension",
              "role": "width",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "stack",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "barmekkoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_mekko_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:barmekkoChart",
            "metricsToPlot": "metric and width metric inputs",
            "xAxisMetric": "width_metric",
            "yAxisMetric": "metric-derived price/rate metric when applicable",
            "xAxisDimension": "width_dimension",
            "yAxisDimension": "stack_dimension",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisMetric",
            "yAxisMetric",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / barmekko_small_multiples",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/barmekko_small_multiples.html",
      "output": "mix_current__barmekko_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1500,
        "height": 650
      },
      "stats": {
        "byte_count": 47617,
        "non_white_ratio": 0.3265220512820513,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.barmekko",
        "grammar": "mix.barmekko",
        "metrics": "Unit Price, Units",
        "dimensions": "Company, Channel, Type",
        "periods": "AC",
        "trace_widths": "1354, 18391, 21099, 27940 +9",
        "identity_hash": "chartdef:v2:sha256:1b00c..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/barmekko_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.barmekko",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show width-by-metric and stack composition using the legacy BarMekko grammar.",
        "evidence_role": "barmekko_mix",
        "required_parameters": [
          "source_file",
          "metric",
          "width_metric",
          "area_represents",
          "width_dimension",
          "stack_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "width_metric",
          "area_represents",
          "width_dimension",
          "stack_dimension",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "barmekko",
          "barmekko_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "allowed_value_types": [
              "rate",
              "ratio",
              "percentage",
              "percent",
              "unit_rate",
              "per_unit"
            ],
            "allowed_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "margin_rate",
              "margin_percent",
              "margin_percentage",
              "margin_per_unit",
              "unit_rate"
            ],
            "blocked_metric_roles": [
              "amount",
              "value",
              "volume",
              "quantity",
              "count"
            ]
          },
          "width_metric": {
            "numeric": true,
            "additive": true,
            "non_negative": true,
            "allowed_value_types": [
              "amount",
              "currency",
              "value",
              "volume",
              "quantity",
              "count"
            ],
            "allowed_metric_roles": [
              "amount",
              "value",
              "volume",
              "quantity",
              "count"
            ]
          }
        },
        "metric_relationships": [
          {
            "relationship_type": "multiplicative_area",
            "width_metric_field": "width_metric",
            "height_metric_field": "metric",
            "area_label_field": "area_represents"
          }
        ],
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "width_dimension",
              "role": "width",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "stack",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "barmekkoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_mekko_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:barmekkoChart",
            "metricsToPlot": "metric and width metric inputs",
            "xAxisMetric": "width_metric",
            "yAxisMetric": "metric-derived price/rate metric when applicable",
            "xAxisDimension": "width_dimension",
            "yAxisDimension": "stack_dimension",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisMetric",
            "yAxisMetric",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / marimekko",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/marimekko.html",
      "output": "mix_current__marimekko.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1052,
        "height": 650
      },
      "stats": {
        "byte_count": 32372,
        "non_white_ratio": 0.5515940333430828,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.marimekko",
        "grammar": "mix.marimekko",
        "metrics": "Sales",
        "dimensions": "Company, Channel",
        "periods": "AC",
        "trace_widths": "103820870, 107924856, 130655887, 131283368 +2",
        "identity_hash": "chartdef:v2:sha256:7970f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/marimekko.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.marimekko",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show two-dimensional composition with width and stack share using the legacy Marimekko grammar.",
        "evidence_role": "marimekko_mix",
        "required_parameters": [
          "source_file",
          "metric",
          "width_dimension",
          "stack_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "width_dimension",
          "stack_dimension",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "marimekko",
          "marimekko_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "width_dimension",
              "role": "width",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "stack",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "marimekkoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_mekko_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:marimekkoChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "width_dimension",
            "yAxisDimension": "stack_dimension",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "highlightedDimension": "focus_item as single-item list when resolved for stack_dimension",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "xAxisDimension",
            "yAxisDimension",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "likeForLikeScope",
            "chosenCohortColumn",
            "lostAndDroppedColumn",
            "smallMultiplesColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / marimekko_small_multiples",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/marimekko_small_multiples.html",
      "output": "mix_current__marimekko_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 2721,
        "height": 910
      },
      "stats": {
        "byte_count": 96005,
        "non_white_ratio": 0.5587494093558041,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.marimekko",
        "grammar": "mix.marimekko",
        "metrics": "Sales",
        "dimensions": "Company, Channel, Type",
        "periods": "AC",
        "trace_widths": "131468, 1874924, 1916776, 1956355 +9",
        "identity_hash": "chartdef:v2:sha256:58926..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/marimekko_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.marimekko",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show two-dimensional composition with width and stack share using the legacy Marimekko grammar.",
        "evidence_role": "marimekko_mix",
        "required_parameters": [
          "source_file",
          "metric",
          "width_dimension",
          "stack_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "value_mode",
          "filters",
          "population_preparation",
          "panel_dimension",
          "focus_item",
          "focus_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "width_dimension",
          "stack_dimension",
          "value_mode",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "marimekko",
          "marimekko_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "width_dimension",
              "role": "width",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "stack",
              "required": true,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "marimekkoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_mekko_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:marimekkoChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "width_dimension",
            "yAxisDimension": "stack_dimension",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "highlightedDimension": "focus_item as single-item list when resolved for stack_dimension",
            "plotValuesAsChoice": "value_mode absolute/percent",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "selectedPeriods",
            "xAxisDimension",
            "yAxisDimension",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "likeForLikeScope",
            "chosenCohortColumn",
            "lostAndDroppedColumn",
            "smallMultiplesColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "highlightedDimension",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / pareto",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/pareto.html",
      "output": "mix_current__pareto.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 700,
        "height": 900
      },
      "stats": {
        "byte_count": 41253,
        "non_white_ratio": 0.032733333333333337,
        "edge_ink_ratio": 0.025175644028103045,
        "crop_risk_ink_ratio": 0.001875,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0033333333333333335,
        "bottom_edge_ink_ratio": 0.09448979591836734,
        "left_edge_ink_ratio": 0.011904761904761904
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.pareto",
        "grammar": "mix.pareto",
        "metrics": "Sales, Units",
        "dimensions": "Product",
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:68d9c..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/pareto.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/evidence_pack/contexts/mix_contribution_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/mix_contribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.pareto",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Rank contribution to a metric and cumulative share with the legacy Pareto grammar.",
        "evidence_role": "contribution_ranking",
        "required_parameters": [
          "source_file",
          "metric",
          "dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "show_only",
          "show_absolute_values",
          "show_rank",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "show_only",
          "show_absolute_values",
          "show_rank",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "xlsx"
            ]
          }
        ],
        "chart_spec_names": [
          "pareto"
        ],
        "selection_guidance": {
          "use_when": "Use to understand concentration: which ranked items drive most of an additive metric and how quickly cumulative share rises.",
          "avoid_when": "Do not use an all-items static PNG for hundreds of ranked items when the report needs a compact executive chart; use show_only=top for printable summaries when needed.",
          "prefer_when": [
            "Use show_only=all for the default static/gallery view, diagnostic inventory, full data return, or interactive review where every ranked item matters.",
            "Use show_only=top for compact executive reporting.",
            "Use show_only=bottom when the question is specifically about low contributors or tail items."
          ]
        },
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 1,
          "slots": [
            {
              "parameter": "dimension",
              "role": "ranked_category",
              "required": true,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "paretoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_pareto_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:paretoChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "dimension",
            "showOnly": "show_only translated to legacy All/Top/Bottom; default All",
            "showAbsoluteValues": "show_absolute_values; default false for cumulative-share Pareto",
            "showRank": "show_rank; default true when show_only=all so the y-axis shows ranks, false for top/bottom item-label views",
            "selectedPeriods": "selected_periods",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "showOnly",
            "showAbsoluteValues",
            "showRank",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        },
        "orchestrator_request_contract": {
          "deterministic_entry_point": "plugins/mix-contribution-analysis/scripts/run_mix_contribution.py",
          "call_boundary": "The orchestrator supplies source, metric, dimension, periods, filters, population preparation, and Pareto mode; the mix plugin owns grouping, ranking, cumulative share calculation, rendering, identity, and manifest output.",
          "required_parameters": [
            "source_file",
            "metric",
            "dimension"
          ],
          "optional_parameters": [
            "period_column",
            "selected_periods",
            "filters",
            "population_preparation",
            "show_only",
            "show_absolute_values",
            "show_rank",
            "analysis_scope"
          ],
          "mode_parameter": "show_only",
          "default_mode": "all",
          "allowed_modes": [
            "top",
            "all",
            "bottom"
          ],
          "recipe_option_mapping": {
            "show_only": "options.pareto_show_only"
          },
          "result_artifact_fields": [
            "artifact_id",
            "capability_id",
            "resolved_parameters",
            "chart_identity",
            "chart_definition_hash",
            "evidence_payload_path"
          ]
        },
        "render_variants": [
          {
            "chart_spec_name": "pareto",
            "show_only": "top",
            "description": "Readable compact Pareto over the top ranked items for summary reporting."
          },
          {
            "chart_spec_name": "pareto",
            "show_only": "all",
            "description": "Full ranked Pareto inventory; this is the default report/gallery mode. Dense threshold callouts are suppressed in static rendering."
          },
          {
            "chart_spec_name": "pareto",
            "show_only": "bottom",
            "description": "Tail Pareto over the bottom ranked items for low-contribution diagnostics."
          }
        ]
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / stacked_pareto_abc",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/stacked_pareto_abc.html",
      "output": "mix_current__stacked_pareto_abc.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 480,
        "height": 650
      },
      "stats": {
        "byte_count": 18559,
        "non_white_ratio": 0.20131730769230768,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_pareto",
        "grammar": "pareto stacked column",
        "metrics": "Sales, Units",
        "dimensions": "Brand",
        "periods": "AC",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:b6649..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/stacked_pareto_abc.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/stacked_pareto_abc_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/stacked_pareto_abc_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_pareto",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Rank contribution using the legacy stacked Pareto grammar, either by ABC class or by aggregating counted items under another dimension.",
        "evidence_role": "stacked_contribution_ranking",
        "required_parameters": [
          "source_file",
          "metric",
          "row_dimension",
          "stacked_pareto_mode"
        ],
        "optional_parameters": [
          "stack_dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "stacked_pareto_mode",
          "row_dimension",
          "stack_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "xlsx"
            ]
          }
        ],
        "chart_spec_names": [
          "stacked_pareto_abc",
          "stacked_pareto_by_dimension"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "counted_ranked_item",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "aggregate_stack",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedParetoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_pareto_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedParetoChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "stack_dimension when stacked_pareto_mode=aggregate_by_dimension",
            "countColumn": "row_dimension",
            "aggregateUniquesByDimension": "true when stacked_pareto_mode=aggregate_by_dimension, otherwise false",
            "aggregateUniquesDimension": "stack_dimension when stacked_pareto_mode=aggregate_by_dimension",
            "selectedPeriods": "selected_periods",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "countColumn",
            "aggregateUniquesByDimension",
            "aggregateUniquesDimension",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        },
        "render_variants": [
          {
            "chart_spec_name": "stacked_pareto_abc",
            "stacked_pareto_mode": "abc_classes",
            "description": "Stack contribution into Pareto A/B/C classes for one ranked item dimension.",
            "required_parameters": [
              "source_file",
              "metric",
              "row_dimension"
            ]
          },
          {
            "chart_spec_name": "stacked_pareto_by_dimension",
            "stacked_pareto_mode": "aggregate_by_dimension",
            "description": "Stack contribution by aggregate dimension while counting unique ranked items.",
            "required_parameters": [
              "source_file",
              "metric",
              "row_dimension",
              "stack_dimension"
            ]
          }
        ]
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "mix_current / stacked_pareto_by_dimension",
      "plugin_source": "mix-contribution-analysis",
      "plugin_source_label": "Mix & Contribution Analysis",
      "source": "../mix_current/mix_regular/stacked_pareto_by_dimension.html",
      "output": "mix_current__stacked_pareto_by_dimension.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 480,
        "height": 650
      },
      "stats": {
        "byte_count": 27655,
        "non_white_ratio": 0.20633974358974358,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "mix.stacked_pareto",
        "grammar": "pareto stacked column",
        "metrics": "Sales, Units",
        "dimensions": "Brand, Company",
        "periods": "AC",
        "trace_widths": "0.9",
        "identity_hash": "chartdef:v2:sha256:940b0..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../mix_current/mix_regular/stacked_pareto_by_dimension.html"
        },
        {
          "label": "context",
          "href": "../mix_current/mix_regular/stacked_pareto_by_dimension_chart_context.json"
        },
        {
          "label": "data",
          "href": "../mix_current/mix_regular/stacked_pareto_by_dimension_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../mix_current/mix_regular/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../mix_current/mix_regular/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "mix.stacked_pareto",
        "plugin": "mix-contribution-analysis",
        "catalog_path": "plugins/mix-contribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Rank contribution using the legacy stacked Pareto grammar, either by ABC class or by aggregating counted items under another dimension.",
        "evidence_role": "stacked_contribution_ranking",
        "required_parameters": [
          "source_file",
          "metric",
          "row_dimension",
          "stacked_pareto_mode"
        ],
        "optional_parameters": [
          "stack_dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "stacked_pareto_mode",
          "row_dimension",
          "stack_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "xlsx"
            ]
          }
        ],
        "chart_spec_names": [
          "stacked_pareto_abc",
          "stacked_pareto_by_dimension"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true,
            "additive": true,
            "stackable": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "row_dimension",
              "role": "counted_ranked_item",
              "required": true,
              "visual": true
            },
            {
              "parameter": "stack_dimension",
              "role": "aggregate_stack",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stackedParetoChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stacked_pareto_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:stackedParetoChart",
            "metricsToPlot": "metric as single-item list",
            "xAxisDimension": "row_dimension",
            "yAxisDimension": "stack_dimension when stacked_pareto_mode=aggregate_by_dimension",
            "countColumn": "row_dimension",
            "aggregateUniquesByDimension": "true when stacked_pareto_mode=aggregate_by_dimension, otherwise false",
            "aggregateUniquesDimension": "stack_dimension when stacked_pareto_mode=aggregate_by_dimension",
            "selectedPeriods": "selected_periods",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "countColumn",
            "aggregateUniquesByDimension",
            "aggregateUniquesDimension",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        },
        "render_variants": [
          {
            "chart_spec_name": "stacked_pareto_abc",
            "stacked_pareto_mode": "abc_classes",
            "description": "Stack contribution into Pareto A/B/C classes for one ranked item dimension.",
            "required_parameters": [
              "source_file",
              "metric",
              "row_dimension"
            ]
          },
          {
            "chart_spec_name": "stacked_pareto_by_dimension",
            "stacked_pareto_mode": "aggregate_by_dimension",
            "description": "Stack contribution by aggregate dimension while counting unique ranked items.",
            "required_parameters": [
              "source_file",
              "metric",
              "row_dimension",
              "stack_dimension"
            ]
          }
        ]
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "scatter / bubble",
      "plugin_source": "scatter-bubble-analysis",
      "plugin_source_label": "Scatter & Bubble Analysis",
      "source": "../scatter/scatter_bubble/bubble.html",
      "output": "scatter__bubble.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1200,
        "height": 900
      },
      "stats": {
        "byte_count": 39224,
        "non_white_ratio": 0.017543518518518517,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "scatter.bubble",
        "grammar": "bubbleChart",
        "metrics": "Sales Growth Rate, Unit Price, Sales",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:14003..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../scatter/scatter_bubble/bubble.html"
        },
        {
          "label": "context",
          "href": "../scatter/scatter_bubble/bubble_chart_context.json"
        },
        {
          "label": "data",
          "href": "../scatter/scatter_bubble/bubble_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../scatter/scatter_bubble/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../scatter/scatter_bubble/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "scatter.bubble",
        "plugin": "scatter-bubble-analysis",
        "catalog_path": "plugins/scatter-bubble-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the relationship between two numeric metrics with a third size metric using the legacy bubble grammar.",
        "evidence_role": "relationship_bubble",
        "required_parameters": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension",
          "bubble_size_metric"
        ],
        "optional_parameters": [
          "color_dimension",
          "panel_dimension",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension",
          "bubble_size_metric",
          "color_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "bubble",
          "bubble_small_multiples"
        ],
        "metric_requirements": {
          "x_metric": {
            "numeric": true
          },
          "y_metric": {
            "numeric": true
          },
          "bubble_size_metric": {
            "numeric": true,
            "additive": true,
            "non_negative": true,
            "allowed_value_types": [
              "amount",
              "currency",
              "value",
              "volume",
              "quantity",
              "count"
            ],
            "allowed_metric_roles": [
              "amount",
              "value",
              "volume",
              "quantity",
              "count"
            ],
            "blocked_value_types": [
              "ratio",
              "rate",
              "percentage",
              "percent",
              "share",
              "index"
            ],
            "blocked_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "cwd",
              "distribution",
              "coverage"
            ]
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "observation_dimension",
              "role": "point_identity",
              "required": true,
              "visual": true
            },
            {
              "parameter": "color_dimension",
              "role": "color_group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "bubbleChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_bubble_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:bubbleChart",
            "xAxisMetric": "x_metric",
            "yAxisMetric": "y_metric",
            "bubbleSize": "bubble_size_metric",
            "metricsToPlot": "[x_metric, y_metric, bubble_size_metric]",
            "xAxisDimension": "observation_dimension",
            "yAxisDimension": "color_dimension or nothingFilteredName",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods when available",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisMetric",
            "yAxisMetric",
            "bubbleSize",
            "metricsToPlot",
            "xAxisDimension",
            "yAxisDimension",
            "smallMultiplesColumn",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "scatter / bubble_small_multiples",
      "plugin_source": "scatter-bubble-analysis",
      "plugin_source_label": "Scatter & Bubble Analysis",
      "source": "../scatter/scatter_bubble/bubble_small_multiples.html",
      "output": "scatter__bubble_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1980,
        "height": 1300
      },
      "stats": {
        "byte_count": 85297,
        "non_white_ratio": 0.014354700854700855,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "scatter.bubble",
        "grammar": "bubbleChart",
        "metrics": "Sales Growth Rate, Unit Price, Sales",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "PY, AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:a7733..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../scatter/scatter_bubble/bubble_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../scatter/scatter_bubble/bubble_small_multiples_chart_context.json"
        },
        {
          "label": "data",
          "href": "../scatter/scatter_bubble/bubble_small_multiples_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../scatter/scatter_bubble/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../scatter/scatter_bubble/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "scatter.bubble",
        "plugin": "scatter-bubble-analysis",
        "catalog_path": "plugins/scatter-bubble-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the relationship between two numeric metrics with a third size metric using the legacy bubble grammar.",
        "evidence_role": "relationship_bubble",
        "required_parameters": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension",
          "bubble_size_metric"
        ],
        "optional_parameters": [
          "color_dimension",
          "panel_dimension",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension",
          "bubble_size_metric",
          "color_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "bubble",
          "bubble_small_multiples"
        ],
        "metric_requirements": {
          "x_metric": {
            "numeric": true
          },
          "y_metric": {
            "numeric": true
          },
          "bubble_size_metric": {
            "numeric": true,
            "additive": true,
            "non_negative": true,
            "allowed_value_types": [
              "amount",
              "currency",
              "value",
              "volume",
              "quantity",
              "count"
            ],
            "allowed_metric_roles": [
              "amount",
              "value",
              "volume",
              "quantity",
              "count"
            ],
            "blocked_value_types": [
              "ratio",
              "rate",
              "percentage",
              "percent",
              "share",
              "index"
            ],
            "blocked_metric_roles": [
              "price",
              "rate",
              "ratio",
              "percentage",
              "percent",
              "share",
              "index",
              "cwd",
              "distribution",
              "coverage"
            ]
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "observation_dimension",
              "role": "point_identity",
              "required": true,
              "visual": true
            },
            {
              "parameter": "color_dimension",
              "role": "color_group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "bubbleChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_bubble_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:bubbleChart",
            "xAxisMetric": "x_metric",
            "yAxisMetric": "y_metric",
            "bubbleSize": "bubble_size_metric",
            "metricsToPlot": "[x_metric, y_metric, bubble_size_metric]",
            "xAxisDimension": "observation_dimension",
            "yAxisDimension": "color_dimension or nothingFilteredName",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods when available",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisMetric",
            "yAxisMetric",
            "bubbleSize",
            "metricsToPlot",
            "xAxisDimension",
            "yAxisDimension",
            "smallMultiplesColumn",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "scatter / scatter",
      "plugin_source": "scatter-bubble-analysis",
      "plugin_source_label": "Scatter & Bubble Analysis",
      "source": "../scatter/scatter_bubble/scatter.html",
      "output": "scatter__scatter.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1200,
        "height": 900
      },
      "stats": {
        "byte_count": 26548,
        "non_white_ratio": 0.011487962962962964,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "scatter.scatter",
        "grammar": "scatterChart",
        "metrics": "CWD, Units, Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:9442d..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../scatter/scatter_bubble/scatter.html"
        },
        {
          "label": "context",
          "href": "../scatter/scatter_bubble/scatter_chart_context.json"
        },
        {
          "label": "data",
          "href": "../scatter/scatter_bubble/scatter_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../scatter/scatter_bubble/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../scatter/scatter_bubble/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "scatter.scatter",
        "plugin": "scatter-bubble-analysis",
        "catalog_path": "plugins/scatter-bubble-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the relationship between two numeric metrics at a chosen observation grain using the legacy scatter grammar.",
        "evidence_role": "relationship_scatter",
        "required_parameters": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension"
        ],
        "optional_parameters": [
          "color_dimension",
          "panel_dimension",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension",
          "color_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "scatter",
          "scatter_small_multiples"
        ],
        "metric_requirements": {
          "x_metric": {
            "numeric": true
          },
          "y_metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "observation_dimension",
              "role": "point_identity",
              "required": true,
              "visual": true
            },
            {
              "parameter": "color_dimension",
              "role": "color_group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "scatterChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_scatter_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:scatterChart",
            "xAxisMetric": "x_metric",
            "yAxisMetric": "y_metric",
            "metricsToPlot": "[x_metric, y_metric]",
            "xAxisDimension": "observation_dimension",
            "yAxisDimension": "color_dimension or nothingFilteredName",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods when available",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisMetric",
            "yAxisMetric",
            "metricsToPlot",
            "xAxisDimension",
            "yAxisDimension",
            "smallMultiplesColumn",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "scatter / scatter_small_multiples",
      "plugin_source": "scatter-bubble-analysis",
      "plugin_source_label": "Scatter & Bubble Analysis",
      "source": "../scatter/scatter_bubble/scatter_small_multiples.html",
      "output": "scatter__scatter_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1980,
        "height": 1300
      },
      "stats": {
        "byte_count": 41999,
        "non_white_ratio": 0.008731546231546232,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "scatter.scatter",
        "grammar": "scatterChart",
        "metrics": "CWD, Units, Value_LC",
        "dimensions": "Company, Brand, Channel +3",
        "periods": "AC",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:655e8..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../scatter/scatter_bubble/scatter_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../scatter/scatter_bubble/scatter_small_multiples_chart_context.json"
        },
        {
          "label": "data",
          "href": "../scatter/scatter_bubble/scatter_small_multiples_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../scatter/scatter_bubble/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../scatter/scatter_bubble/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "scatter.scatter",
        "plugin": "scatter-bubble-analysis",
        "catalog_path": "plugins/scatter-bubble-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the relationship between two numeric metrics at a chosen observation grain using the legacy scatter grammar.",
        "evidence_role": "relationship_scatter",
        "required_parameters": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension"
        ],
        "optional_parameters": [
          "color_dimension",
          "panel_dimension",
          "filters",
          "population_preparation",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "x_metric",
          "y_metric",
          "observation_dimension",
          "color_dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "scatter",
          "scatter_small_multiples"
        ],
        "metric_requirements": {
          "x_metric": {
            "numeric": true
          },
          "y_metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 1,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "observation_dimension",
              "role": "point_identity",
              "required": true,
              "visual": true
            },
            {
              "parameter": "color_dimension",
              "role": "color_group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "scatterChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_scatter_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:scatterChart",
            "xAxisMetric": "x_metric",
            "yAxisMetric": "y_metric",
            "metricsToPlot": "[x_metric, y_metric]",
            "xAxisDimension": "observation_dimension",
            "yAxisDimension": "color_dimension or nothingFilteredName",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods when available",
            "filterDictName": "filters translated by recipe_filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.like_for_like.entity_dimension or population_preparation.cohort_tagging.entity_dimension"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisMetric",
            "yAxisMetric",
            "metricsToPlot",
            "xAxisDimension",
            "yAxisDimension",
            "smallMultiplesColumn",
            "selectedPeriods",
            "filterDictName",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / boxplot",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/boxplot.html",
      "output": "distribution__boxplot.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 25013,
        "non_white_ratio": 0.026002380952380954,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.boxplot",
        "grammar": "distribution.boxplot",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:e37b4..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/boxplot.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.boxplot",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare spread and outliers for one numeric metric across optional groups.",
        "evidence_role": "spread_outlier_comparison",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "boxplot",
          "boxplot_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "boxplotChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_boxplot_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:boxplotChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / boxplot_small_multiples",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/boxplot_small_multiples.html",
      "output": "distribution__boxplot_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 32367,
        "non_white_ratio": 0.017519047619047618,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.boxplot",
        "grammar": "distribution.boxplot",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:e969f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/boxplot_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.boxplot",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Compare spread and outliers for one numeric metric across optional groups.",
        "evidence_role": "spread_outlier_comparison",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "boxplot",
          "boxplot_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "boxplotChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_boxplot_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:boxplotChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / ecdf",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/ecdf.html",
      "output": "distribution__ecdf.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 22085,
        "non_white_ratio": 0.009484126984126984,
        "edge_ink_ratio": 0.005161164670367124,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009682539682539683,
        "left_edge_ink_ratio": 0.005679012345679012
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.ecdf",
        "grammar": "distribution.ecdf",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:e377f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/ecdf.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.ecdf",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show cumulative distribution for one numeric metric.",
        "evidence_role": "cumulative_distribution",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "ecdf",
          "ecdf_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "ecdfChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_ecdf_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:ecdfChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / ecdf_small_multiples",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/ecdf_small_multiples.html",
      "output": "distribution__ecdf_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 38030,
        "non_white_ratio": 0.01611746031746032,
        "edge_ink_ratio": 0.007352225143636187,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009682539682539683,
        "left_edge_ink_ratio": 0.016790123456790124
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.ecdf",
        "grammar": "distribution.ecdf",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:86d73..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/ecdf_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.ecdf",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show cumulative distribution for one numeric metric.",
        "evidence_role": "cumulative_distribution",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "ecdf",
          "ecdf_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "ecdfChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_ecdf_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:ecdfChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / histogram",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/histogram.html",
      "output": "distribution__histogram.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 18578,
        "non_white_ratio": 0.14638968253968254,
        "edge_ink_ratio": 0.17289901645729866,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009285714285714286,
        "left_edge_ink_ratio": 0.8569135802469136
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.histogram",
        "grammar": "distribution.histogram",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:e0ca4..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/histogram.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.histogram",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the distribution of one numeric metric with binned counts or value mass.",
        "evidence_role": "distribution_shape",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "histogram",
          "histogram_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "histogramChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_histogram_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:histogramChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / histogram_small_multiples",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/histogram_small_multiples.html",
      "output": "distribution__histogram_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 28425,
        "non_white_ratio": 0.04853492063492063,
        "edge_ink_ratio": 0.13455545817509007,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009285714285714286,
        "left_edge_ink_ratio": 0.6624691358024691
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.histogram",
        "grammar": "distribution.histogram",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:6c689..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/histogram_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.histogram",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show the distribution of one numeric metric with binned counts or value mass.",
        "evidence_role": "distribution_shape",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "histogram",
          "histogram_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "histogramChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_histogram_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:histogramChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / kernel_density",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/kernel_density.html",
      "output": "distribution__kernel_density.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 43865,
        "non_white_ratio": 0.07590555555555556,
        "edge_ink_ratio": 0.006597526536176843,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009285714285714286,
        "left_edge_ink_ratio": 0.013580246913580247
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.kernel_density",
        "grammar": "distribution.kernel_density",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:21d9f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/kernel_density.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.kernel_density",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show a smoothed density view for one numeric metric.",
        "evidence_role": "smoothed_distribution",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "kernel_density",
          "kernel_density_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "kernelDensityChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_kernel_density_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:kernelDensityChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / kernel_density_small_multiples",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/kernel_density_small_multiples.html",
      "output": "distribution__kernel_density_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 47097,
        "non_white_ratio": 0.03890396825396825,
        "edge_ink_ratio": 0.007035738630830656,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009285714285714286,
        "left_edge_ink_ratio": 0.01580246913580247
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.kernel_density",
        "grammar": "distribution.kernel_density",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:fd15e..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/kernel_density_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.kernel_density",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show a smoothed density view for one numeric metric.",
        "evidence_role": "smoothed_distribution",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "kernel_density",
          "kernel_density_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "kernelDensityChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_kernel_density_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:kernelDensityChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / stripplot",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/stripplot.html",
      "output": "distribution__stripplot.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 21746,
        "non_white_ratio": 0.00488015873015873,
        "edge_ink_ratio": 0.006597526536176843,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009285714285714286,
        "left_edge_ink_ratio": 0.013580246913580247
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.stripplot",
        "grammar": "distribution.stripplot",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:6d663..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/stripplot.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.stripplot",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show individual observations for one numeric metric across optional groups.",
        "evidence_role": "observation_distribution",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "stripplot",
          "stripplot_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stripplotChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stripplot_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stripplotChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "distribution / stripplot_small_multiples",
      "plugin_source": "distribution-analysis",
      "plugin_source_label": "Distribution Analysis",
      "source": "../distribution/distribution/stripplot_small_multiples.html",
      "output": "distribution__stripplot_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 29681,
        "non_white_ratio": 0.009211904761904761,
        "edge_ink_ratio": 0.007035738630830656,
        "crop_risk_ink_ratio": 0.0021256038647342996,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.005432098765432099,
        "bottom_edge_ink_ratio": 0.009285714285714286,
        "left_edge_ink_ratio": 0.01580246913580247
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "distribution.stripplot",
        "grammar": "distribution.stripplot",
        "metrics": "Units",
        "dimensions": "Company, Channel, Brand +3",
        "periods": "~Aug-2016, ~Aug-2017",
        "trace_widths": null,
        "identity_hash": "chartdef:v2:sha256:dc4f2..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../distribution/distribution/stripplot_small_multiples.html"
        },
        {
          "label": "context",
          "href": "../distribution/distribution/evidence_pack/contexts/distribution_context.json"
        },
        {
          "label": "data",
          "href": "../distribution/distribution/distribution_summary.csv"
        },
        {
          "label": "manifest",
          "href": "../distribution/distribution/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../distribution/distribution/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "distribution.stripplot",
        "plugin": "distribution-analysis",
        "catalog_path": "plugins/distribution-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show individual observations for one numeric metric across optional groups.",
        "evidence_role": "observation_distribution",
        "required_parameters": [
          "source_file",
          "metric"
        ],
        "optional_parameters": [
          "dimension",
          "period_column",
          "selected_periods",
          "filters",
          "population_preparation",
          "panel_dimension",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "metric",
          "dimension",
          "panel_dimension",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "chart_spec_names": [
          "stripplot",
          "stripplot_small_multiples"
        ],
        "metric_requirements": {
          "metric": {
            "numeric": true
          }
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 2,
          "slots": [
            {
              "parameter": "dimension",
              "role": "group",
              "required": false,
              "visual": true
            },
            {
              "parameter": "panel_dimension",
              "role": "panel",
              "required": false,
              "visual": true
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "stripplotChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_stripplot_charts",
          "chartdict_mapping": {
            "chosenChart": "constant:stripplotChart",
            "metricsToPlot": "metric as single-item list",
            "singleMetric": "metric",
            "xAxisMetric": "metric",
            "yAxisMetric": "metric",
            "xAxisDimension": "dimension or nothingFilteredName",
            "selectedPeriods": "selected_periods",
            "smallMultiplesColumn": "panel_dimension or nothingFilteredName",
            "plotSmallMultiplesOtherCharts": "derived from panel_dimension",
            "plotValuesAsChoice": "constant:absolute",
            "filterDictName": "filters translated by recipe_filters",
            "isFilteredKey": "derived from filters",
            "likeForLikeName": "population_preparation.like_for_like.enabled",
            "chosenCohortColumn": "population_preparation.cohort_tagging.entity_dimension when requested"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "metricsToPlot",
            "xAxisDimension",
            "selectedPeriods",
            "smallMultiplesColumn",
            "plotValuesAsChoice",
            "filterDictName",
            "isFilteredKey",
            "likeForLikeName",
            "chosenCohortColumn"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "set_overlap / upset",
      "plugin_source": "set-overlap-analysis",
      "plugin_source_label": "Set Overlap Analysis",
      "source": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/upset.html",
      "output": "set_overlap__upset.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 770,
        "height": 472
      },
      "stats": {
        "byte_count": 20249,
        "non_white_ratio": 0.14296169931763153,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "set_overlap.upset",
        "grammar": "set_overlap.upset",
        "metrics": null,
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/upset.html"
        },
        {
          "label": "context",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/set_overlap_context.json"
        },
        {
          "label": "data",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/set_overlap_set_summary.csv"
        },
        {
          "label": "manifest",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "set_overlap.upset",
        "plugin": "set-overlap-analysis",
        "catalog_path": "plugins/set-overlap-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show exact item overlap across selected sets with an UpSet chart and intersection tables.",
        "evidence_role": "set_intersection_ranking",
        "required_parameters": [
          "source_file",
          "item_column",
          "set_column"
        ],
        "optional_parameters": [
          "period_column",
          "selected_period",
          "set_values",
          "max_sets",
          "min_intersection_size",
          "filters",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "item_column",
          "set_column",
          "selected_period",
          "set_values",
          "max_sets",
          "min_intersection_size",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png",
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "upset"
        ],
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "set_values",
              "role": "selected_sets",
              "required": false,
              "visual": true,
              "min_items": 2,
              "max_items": null,
              "resolved_when_missing": true,
              "resolved_from": "set_column top max_sets values"
            },
            {
              "parameter": "item_column",
              "role": "item_identity",
              "required": true,
              "visual": false
            },
            {
              "parameter": "set_column",
              "role": "set_membership_source",
              "required": true,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "upsetChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_upset_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:upsetChart",
            "xAxisDimension": "item_column",
            "yAxisDimension": "set_column",
            "selectedPeriods": "selected_period when period_column is present",
            "filterDictName": "filters translated by recipe_filters",
            "setValues": "set_values",
            "minIntersectionSize": "min_intersection_size"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "filterDictName",
            "setValues",
            "minIntersectionSize"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ],
          "notes": "Set-overlap plugins also use dedicated request fields outside the classic chartDict where legacy has no stable key."
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "set_overlap / set_overlap_small_multiples / upset_small_multiples",
      "plugin_source": "set-overlap-analysis",
      "plugin_source_label": "Set Overlap Analysis",
      "source": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap_small_multiples/upset_small_multiples.html",
      "output": "set_overlap__set_overlap_small_multiples__upset_small_multiples.png",
      "artifact_type": "html",
      "dimensions": {
        "width": 1090,
        "height": 1971
      },
      "stats": {
        "byte_count": 96300,
        "non_white_ratio": 0.11923626529633818,
        "edge_ink_ratio": 0.0006247944755014798,
        "crop_risk_ink_ratio": 3.266906239790918e-05,
        "top_edge_ink_ratio": 9.174311926605505e-05,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0018772196854388635
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "set_overlap.upset_small_multiples",
        "grammar": "set_overlap.upset_small_multiples",
        "metrics": null,
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap_small_multiples/upset_small_multiples.html"
        },
        {
          "label": "context",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap_small_multiples/set_overlap_context.json"
        },
        {
          "label": "data",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap_small_multiples/set_overlap_set_summary.csv"
        },
        {
          "label": "manifest",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap_small_multiples/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap_small_multiples/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "set_overlap.upset_small_multiples",
        "plugin": "set-overlap-analysis",
        "catalog_path": "plugins/set-overlap-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show per-facet UpSet panels with independent set ranking and lower-ranked sets collapsed into Other rank >N.",
        "evidence_role": "faceted_set_intersection_ranking",
        "required_parameters": [
          "source_file",
          "item_column",
          "set_column",
          "small_multiples_dimension"
        ],
        "optional_parameters": [
          "period_column",
          "selected_period",
          "max_sets",
          "aggregate_other_sets",
          "small_multiples_max_panels",
          "min_intersection_size",
          "filters",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "item_column",
          "set_column",
          "selected_period",
          "max_sets",
          "aggregate_other_sets",
          "small_multiples_dimension",
          "small_multiples_max_panels",
          "min_intersection_size",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "html"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "upset_small_multiples"
        ],
        "dimension_contract": {
          "min_visual_dimensions": 3,
          "max_visual_dimensions": null,
          "slots": [
            {
              "parameter": "small_multiples_dimension",
              "role": "facet",
              "required": true,
              "visual": true,
              "min_items": 1,
              "max_items": null,
              "resolved_when_missing": false
            },
            {
              "parameter": "max_sets",
              "role": "per_panel_ranked_sets",
              "required": false,
              "visual": true,
              "min_items": 2,
              "max_items": null,
              "resolved_when_missing": true,
              "resolved_from": "set_column top max_sets values per facet plus Other rank >N"
            },
            {
              "parameter": "item_column",
              "role": "item_identity",
              "required": true,
              "visual": false
            },
            {
              "parameter": "set_column",
              "role": "set_membership_source",
              "required": true,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "upsetChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_upset_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:upsetChart",
            "xAxisDimension": "item_column",
            "yAxisDimension": "set_column",
            "smallMultiplesColumn": "small_multiples_dimension",
            "numberOfTop": "max_sets",
            "aggregateOtherItems": "aggregate_other_sets",
            "selectedPeriods": "selected_period when period_column is present",
            "filterDictName": "filters translated by recipe_filters",
            "minIntersectionSize": "min_intersection_size"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisDimension",
            "yAxisDimension",
            "smallMultiplesColumn",
            "numberOfTop",
            "aggregateOtherItems",
            "selectedPeriods",
            "filterDictName",
            "minIntersectionSize"
          ],
          "render_chartdict_keys": [
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ],
          "notes": "Small-multiple UpSet panels rank sets per facet by default; Other rank >N is panel-local."
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "set_overlap / venn",
      "plugin_source": "set-overlap-analysis",
      "plugin_source_label": "Set Overlap Analysis",
      "source": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/venn.png",
      "output": "set_overlap__venn.png",
      "artifact_type": "png",
      "dimensions": {
        "width": 1400,
        "height": 900
      },
      "stats": {
        "byte_count": 45399,
        "non_white_ratio": 0.17240952380952382,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "set_overlap.venn",
        "grammar": "set_overlap.venn",
        "metrics": null,
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/venn.png"
        },
        {
          "label": "context",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/set_overlap_context.json"
        },
        {
          "label": "data",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/set_overlap_set_summary.csv"
        },
        {
          "label": "manifest",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "file:///Users/fabio/Documents/GitHub/app_files/static/shared/set_overlap/set_overlap/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "set_overlap.venn",
        "plugin": "set-overlap-analysis",
        "catalog_path": "plugins/set-overlap-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Show item overlap for exactly two or three selected sets with a Venn diagram.",
        "evidence_role": "set_overlap_venn",
        "required_parameters": [
          "source_file",
          "item_column",
          "set_column"
        ],
        "optional_parameters": [
          "period_column",
          "selected_period",
          "set_values",
          "max_sets",
          "min_intersection_size",
          "filters",
          "analysis_scope"
        ],
        "identity_fields": [
          "source_file",
          "item_column",
          "set_column",
          "selected_period",
          "set_values",
          "max_sets",
          "min_intersection_size",
          "analysis_scope"
        ],
        "outputs": [
          {
            "artifact_type": "chart",
            "formats": [
              "png"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          },
          {
            "artifact_type": "table",
            "formats": [
              "csv"
            ]
          }
        ],
        "chart_spec_names": [
          "venn"
        ],
        "dimension_contract": {
          "min_visual_dimensions": 2,
          "max_visual_dimensions": 3,
          "slots": [
            {
              "parameter": "set_values",
              "role": "selected_sets",
              "required": false,
              "visual": true,
              "min_items": 2,
              "max_items": 3,
              "resolved_when_missing": true,
              "resolved_from": "set_column top max_sets values",
              "max_count_parameter": "max_sets"
            },
            {
              "parameter": "item_column",
              "role": "item_identity",
              "required": true,
              "visual": false
            },
            {
              "parameter": "set_column",
              "role": "set_membership_source",
              "required": true,
              "visual": false
            }
          ]
        },
        "legacy_chartdict_contract": {
          "legacy_chart_key": "vennChart",
          "legacy_plotter": "modules.charting.plot_charts.plot_venn_chart",
          "chartdict_mapping": {
            "chosenChart": "constant:vennChart",
            "xAxisDimension": "item_column",
            "yAxisDimension": "set_column",
            "selectedPeriods": "selected_period when period_column is present",
            "filterDictName": "filters translated by recipe_filters",
            "setValues": "set_values limited to two or three sets"
          },
          "identity_chartdict_keys": [
            "chosenChart",
            "xAxisDimension",
            "yAxisDimension",
            "selectedPeriods",
            "filterDictName",
            "setValues"
          ],
          "render_chartdict_keys": [
            "aggregateOtherItems",
            "chartSize",
            "colorChoice",
            "colorpalette",
            "export_format",
            "numberOfPlottedSmallMultiples",
            "numberOfTop",
            "palette",
            "plotTitleText",
            "showAbsoluteValues",
            "showLabels",
            "showLegend",
            "title"
          ],
          "notes": "Set-overlap plugins also use dedicated request fields outside the classic chartDict where legacy has no stable key."
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "funnel / funnel_stage_table",
      "plugin_source": "funnel-analysis",
      "plugin_source_label": "Funnel Analysis",
      "source": "../funnel/funnel/funnel_stage_table.html",
      "output": "funnel__funnel_stage_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 980,
        "height": 480
      },
      "stats": {
        "byte_count": 61372,
        "non_white_ratio": 0.0815391156462585,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "funnel.stage_table",
        "grammar": "funnel.stage_table",
        "metrics": "Lead readiness funnel",
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": "tabledef:v1:sha256:9249f..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../funnel/funnel/funnel_stage_table.html"
        },
        {
          "label": "context",
          "href": "../funnel/funnel/funnel_stage_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../funnel/funnel/funnel_stage_table_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../funnel/funnel/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../funnel/funnel/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "funnel.stage_table",
        "plugin": "funnel-analysis",
        "catalog_path": "plugins/funnel-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Present an ordered stage or gate scheme with starting population, passing population, drop-off, stage conversion, and cumulative conversion.",
        "evidence_role": "funnel_stage_evidence_table",
        "required_parameters": [
          "source_file",
          "stage_definitions"
        ],
        "optional_parameters": [
          "output_dir",
          "recipe",
          "metric_label",
          "unit",
          "scope_label",
          "title",
          "language"
        ],
        "identity_fields": [
          "source_file",
          "stage_definitions",
          "metric_label",
          "unit",
          "scope_label",
          "title"
        ],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "png",
              "html",
              "csv"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "object_type": "table",
        "table_spec_names": [
          "funnel_stage_table"
        ],
        "visual_family": "reporting_table",
        "selection_guidance": {
          "use_when": "Use when the business rows are an explicit ordered funnel, readiness pipeline, stage gate, or calculation scheme and the report needs exact pass/drop-off evidence.",
          "avoid_when": "Do not use for ordinary product, customer, brand, region, or period sales slicing; use period comparison tables or charts for those requests.",
          "prefer_when": [
            "Rows represent deterministic gates that must be evaluated sequentially.",
            "The narrative needs both per-stage conversion and cumulative conversion.",
            "The report needs table evidence for a funnel where a chart alone would hide exact counts."
          ]
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 0,
          "uses_stage_definitions": true,
          "slots": []
        },
        "native_table_contract": {
          "table_key": "funnel_stage_table",
          "renderer": "funnel_analysis.stage_reporting_table",
          "row_grain": "One row per explicit ordered stage; each row evaluates only the records that passed the prior stage.",
          "columns": [
            {
              "key": "stage",
              "label": "Stage",
              "role": "stage_row_label",
              "alignment": "left"
            },
            {
              "key": "start_count",
              "label": "Start",
              "role": "starting_population",
              "alignment": "numeric"
            },
            {
              "key": "pass_count",
              "label": "Pass",
              "role": "passing_population",
              "alignment": "numeric"
            },
            {
              "key": "drop_off",
              "label": "Drop-off",
              "role": "stage_drop_off",
              "alignment": "numeric",
              "signed": true
            },
            {
              "key": "stage_conversion",
              "label": "Stage %",
              "role": "stage_conversion_rate",
              "alignment": "numeric"
            },
            {
              "key": "cumulative_conversion",
              "label": "Cumulative %",
              "role": "cumulative_conversion_rate",
              "alignment": "numeric"
            },
            {
              "key": "note",
              "label": "Note",
              "role": "predicate_summary",
              "alignment": "left"
            }
          ],
          "style_rules": [
            "Use white background, thin row separators, and no alternating row fills.",
            "Keep stage rows in the recipe order.",
            "Show drop-offs as signed counts and conversion rates as percentages.",
            "Use restrained in-cell bars or pins only to make stage conversion and cumulative conversion easier to scan."
          ],
          "reference_family": "reporting_table"
        },
        "orchestrator_request_contract": {
          "deterministic_entry_point": "plugins/funnel-analysis/scripts/funnel_core.py::run_funnel_analysis",
          "call_boundary": "The orchestrator supplies the source file and explicit stage definitions; the funnel-analysis plugin owns predicate validation, sequential data preparation, table rendering, artifact identity, and manifest output.",
          "required_parameters": [
            "source_file",
            "stage_definitions"
          ],
          "optional_parameters": [
            "output_dir",
            "recipe",
            "metric_label",
            "unit",
            "scope_label",
            "title",
            "language"
          ],
          "result_artifact_fields": [
            "artifact_id",
            "kind",
            "capability_id",
            "table_key",
            "table_spec_name",
            "resolved_parameters",
            "table_definition_hash",
            "path"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "statement / pnl_statement_table",
      "plugin_source": "statement-analysis",
      "plugin_source_label": "Statement Analysis",
      "source": "../statement/statement/pnl_statement_table.html",
      "output": "statement__pnl_statement_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 1120,
        "height": 658
      },
      "stats": {
        "byte_count": 80554,
        "non_white_ratio": 0.08515658923143725,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "statement.pnl_table",
        "grammar": "statement.pnl_table",
        "metrics": null,
        "dimensions": null,
        "periods": null,
        "trace_widths": null,
        "identity_hash": "tabledef:v1:sha256:b30fc..."
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../statement/statement/pnl_statement_table.html"
        },
        {
          "label": "context",
          "href": "../statement/statement/pnl_statement_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../statement/statement/pnl_statement_table_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../statement/statement/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../statement/statement/used_recipe.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "statement.pnl_table",
        "plugin": "statement-analysis",
        "catalog_path": "plugins/statement-analysis/references/evidence_capabilities.json",
        "status": "available",
        "when_to_use": "Present a profit-and-loss or income statement scheme with grouped period/scenario columns and deterministically computed subtotal and total rows.",
        "evidence_role": "statement_pnl_evidence_table",
        "required_parameters": [
          "source_file",
          "statement_rows",
          "periods",
          "scenarios_by_period"
        ],
        "optional_parameters": [
          "output_dir",
          "recipe",
          "statement_label",
          "unit",
          "scope_label",
          "title",
          "language"
        ],
        "identity_fields": [
          "source_file",
          "statement_rows",
          "periods",
          "scenarios_by_period",
          "statement_label",
          "unit",
          "scope_label",
          "title"
        ],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "png",
              "html",
              "csv"
            ]
          },
          {
            "artifact_type": "context",
            "formats": [
              "json"
            ]
          }
        ],
        "object_type": "table",
        "table_spec_names": [
          "pnl_statement_table"
        ],
        "visual_family": "reporting_table",
        "selection_guidance": {
          "use_when": "Use when business rows are a P&L, income statement, gross-to-net, margin, or contribution-statement calculation scheme and the report needs exact statement-line evidence.",
          "avoid_when": "Do not use for ordinary product, customer, brand, region, or period sales slicing; use period comparison tables or charts for those requests.",
          "prefer_when": [
            "Rows represent an ordered calculation scheme with detail, subtotal, and total lines.",
            "The narrative needs exact statement values across periods and scenarios.",
            "The report needs table evidence where a chart would hide the arithmetic structure."
          ]
        },
        "dimension_contract": {
          "min_visual_dimensions": 0,
          "max_visual_dimensions": 0,
          "uses_statement_rows": true,
          "slots": []
        },
        "native_table_contract": {
          "table_key": "pnl_statement_table",
          "renderer": "statement_analysis.pnl_reporting_table",
          "row_grain": "One row per ordered P&L statement line; source rows use input values and subtotal/total rows are computed from prior rows in the recipe.",
          "columns": [
            {
              "key": "label",
              "label": "Statement line",
              "role": "statement_row_label",
              "alignment": "left"
            },
            {
              "key": "period_scenario_values",
              "label": "Period/scenario values",
              "role": "scenario_value_matrix",
              "alignment": "numeric"
            },
            {
              "key": "line_type",
              "label": "Line type",
              "role": "detail_subtotal_total_marker",
              "alignment": "left"
            }
          ],
          "style_rules": [
            "Use white background, thin row separators, and no alternating row fills.",
            "Keep statement rows in the recipe order.",
            "Bold subtotal and total rows and separate them with heavier rules.",
            "Group columns by period and show scenario labels under each period.",
            "Keep units in the title or subtitle rather than repeating them in each cell."
          ],
          "reference_family": "reporting_table"
        },
        "orchestrator_request_contract": {
          "deterministic_entry_point": "plugins/statement-analysis/scripts/statement_core.py::run_statement_analysis",
          "call_boundary": "The orchestrator supplies source values and an explicit statement row scheme; the statement-analysis plugin owns formula validation, subtotal calculation, table rendering, artifact identity, and manifest output.",
          "required_parameters": [
            "source_file",
            "statement_rows",
            "periods",
            "scenarios_by_period"
          ],
          "optional_parameters": [
            "output_dir",
            "recipe",
            "statement_label",
            "unit",
            "scope_label",
            "title",
            "language"
          ],
          "result_artifact_fields": [
            "artifact_id",
            "kind",
            "capability_id",
            "table_key",
            "table_spec_name",
            "resolved_parameters",
            "table_definition_hash",
            "path"
          ]
        }
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      }
    },
    {
      "label": "attributes / attribute_bridge_table",
      "plugin_source": "attribute-tables",
      "plugin_source_label": "Attribute Tables",
      "source": "../attributes/attributes/attribute_bridge_table.html",
      "output": "attributes__attribute_bridge_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 1360,
        "height": 577
      },
      "stats": {
        "byte_count": 92373,
        "non_white_ratio": 0.07431950249770619,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "attributes.attribute_bridge_table",
        "grammar": "attribute_bridge_table",
        "metrics": "current_n, current_share, current_delta +5",
        "dimensions": "signal_bundle, alignment",
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../attributes/attributes/attribute_bridge_table.html"
        },
        {
          "label": "context",
          "href": "../attributes/attributes/attribute_bridge_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../attributes/attributes/attribute_bridge_table_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../attributes/attributes/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../attributes/attributes/attribute_table_catalog.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "attributes.attribute_bridge_table",
        "plugin": "attribute-tables",
        "catalog_path": "modules/pdp/attribute_table_catalog.json",
        "status": "available",
        "when_to_use": "Use when the report needs to compare current winners with emerging signals and explicitly show alignment, divergence, or one-sided evidence.",
        "evidence_role": null,
        "required_parameters": [
          "package_dir"
        ],
        "optional_parameters": [
          "output_dir",
          "table_keys"
        ],
        "identity_fields": [],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "html"
            ]
          },
          {
            "artifact_type": "manifest",
            "formats": [
              "json"
            ]
          }
        ],
        "execution_contract": {
          "entry_point": "modules.pdp.attribute_table_templates.build_attribute_tables_from_package",
          "cli": "scripts/build_attribute_table_artifacts.py",
          "required_parameters": [
            "package_dir"
          ],
          "optional_parameters": [
            "output_dir",
            "table_keys"
          ],
          "deterministic_boundary": "The table builder reads package CSVs, selects rows, formats values, writes CSV/HTML artifacts, and returns a manifest. The model chooses the table and interprets the rows, but does not compute or render the table."
        },
        "object_type": "table"
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      },
      "display_row_limit": 5
    },
    {
      "label": "attributes / attribute_bundle_comparison_table",
      "plugin_source": "attribute-tables",
      "plugin_source_label": "Attribute Tables",
      "source": "../attributes/attributes/attribute_bundle_comparison_table.html",
      "output": "attributes__attribute_bundle_comparison_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 1360,
        "height": 524
      },
      "stats": {
        "byte_count": 84597,
        "non_white_ratio": 0.07716238212842388,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "attributes.attribute_bundle_comparison_table",
        "grammar": "attribute_bundle_comparison_table",
        "metrics": "focus_n, baseline_n, focus_share +4",
        "dimensions": "layer, comparison, signal_bundle",
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../attributes/attributes/attribute_bundle_comparison_table.html"
        },
        {
          "label": "context",
          "href": "../attributes/attributes/attribute_bundle_comparison_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../attributes/attributes/attribute_bundle_comparison_table_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../attributes/attributes/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../attributes/attributes/attribute_table_catalog.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "attributes.attribute_bundle_comparison_table",
        "plugin": "attribute-tables",
        "catalog_path": "modules/pdp/attribute_table_catalog.json",
        "status": "available",
        "when_to_use": "Use when the report needs exact bundle evidence for winning-now or emerging-signal rows, including focus/baseline counts, shares, delta, index, and brand breadth.",
        "evidence_role": null,
        "required_parameters": [
          "package_dir"
        ],
        "optional_parameters": [
          "output_dir",
          "table_keys"
        ],
        "identity_fields": [],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "html"
            ]
          },
          {
            "artifact_type": "manifest",
            "formats": [
              "json"
            ]
          }
        ],
        "execution_contract": {
          "entry_point": "modules.pdp.attribute_table_templates.build_attribute_tables_from_package",
          "cli": "scripts/build_attribute_table_artifacts.py",
          "required_parameters": [
            "package_dir"
          ],
          "optional_parameters": [
            "output_dir",
            "table_keys"
          ],
          "deterministic_boundary": "The table builder reads package CSVs, selects rows, formats values, writes CSV/HTML artifacts, and returns a manifest. The model chooses the table and interprets the rows, but does not compute or render the table."
        },
        "object_type": "table"
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      },
      "display_row_limit": 5
    },
    {
      "label": "attributes / product_signal_evidence_table",
      "plugin_source": "attribute-tables",
      "plugin_source_label": "Attribute Tables",
      "source": "../attributes/attributes/product_signal_evidence_table.html",
      "output": "attributes__product_signal_evidence_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 1360,
        "height": 1232
      },
      "stats": {
        "byte_count": 201573,
        "non_white_ratio": 0.06075666061879297,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "attributes.product_signal_evidence_table",
        "grammar": "product_signal_evidence_table",
        "metrics": "rating, reviews",
        "dimensions": "cohort, rank, brand +2",
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../attributes/attributes/product_signal_evidence_table.html"
        },
        {
          "label": "context",
          "href": "../attributes/attributes/product_signal_evidence_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../attributes/attributes/product_signal_evidence_table_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../attributes/attributes/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../attributes/attributes/attribute_table_catalog.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "attributes.product_signal_evidence_table",
        "plugin": "attribute-tables",
        "catalog_path": "modules/pdp/attribute_table_catalog.json",
        "status": "available",
        "when_to_use": "Use when the report needs product-level grounding for selected bundles, standout examples, or PDP/review reality checks; prefer image cards in the report narrative and this table as compact validation detail.",
        "evidence_role": null,
        "required_parameters": [
          "package_dir"
        ],
        "optional_parameters": [
          "output_dir",
          "table_keys"
        ],
        "identity_fields": [],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "html"
            ]
          },
          {
            "artifact_type": "manifest",
            "formats": [
              "json"
            ]
          }
        ],
        "execution_contract": {
          "entry_point": "modules.pdp.attribute_table_templates.build_attribute_tables_from_package",
          "cli": "scripts/build_attribute_table_artifacts.py",
          "required_parameters": [
            "package_dir"
          ],
          "optional_parameters": [
            "output_dir",
            "table_keys"
          ],
          "deterministic_boundary": "The table builder reads package CSVs, selects rows, formats values, writes CSV/HTML artifacts, and returns a manifest. The model chooses the table and interprets the rows, but does not compute or render the table."
        },
        "object_type": "table"
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      },
      "display_row_limit": 10
    },
    {
      "label": "attributes / rank_weighted_visibility_table",
      "plugin_source": "attribute-tables",
      "plugin_source_label": "Attribute Tables",
      "source": "../attributes/attributes/rank_weighted_visibility_table.html",
      "output": "attributes__rank_weighted_visibility_table.png",
      "artifact_type": "table",
      "dimensions": {
        "width": 1360,
        "height": 504
      },
      "stats": {
        "byte_count": 72509,
        "non_white_ratio": 0.06890756302521009,
        "edge_ink_ratio": 0.0,
        "crop_risk_ink_ratio": 0.0,
        "top_edge_ink_ratio": 0.0,
        "right_edge_ink_ratio": 0.0,
        "bottom_edge_ink_ratio": 0.0,
        "left_edge_ink_ratio": 0.0
      },
      "quality_flags": [],
      "context_summary": {
        "capability": "attributes.rank_weighted_visibility_table",
        "grammar": "rank_weighted_visibility_table",
        "metrics": "gross_weight, incremental, cumulative +3",
        "dimensions": "rank, lane",
        "periods": null,
        "trace_widths": null,
        "identity_hash": null
      },
      "sidecars": [
        {
          "label": "source",
          "href": "../attributes/attributes/rank_weighted_visibility_table.html"
        },
        {
          "label": "context",
          "href": "../attributes/attributes/rank_weighted_visibility_table_chart_context.json"
        },
        {
          "label": "data",
          "href": "../attributes/attributes/rank_weighted_visibility_table_chart_data.csv"
        },
        {
          "label": "manifest",
          "href": "../attributes/attributes/evidence_pack/manifest.json"
        },
        {
          "label": "recipe",
          "href": "../attributes/attributes/attribute_table_catalog.json"
        }
      ],
      "orchestrator_contract": {
        "capability_id": "attributes.rank_weighted_visibility_table",
        "plugin": "attribute-tables",
        "catalog_path": "modules/pdp/attribute_table_catalog.json",
        "status": "available",
        "when_to_use": "Use when the report needs to ground claims about rank-weighted shelf visibility, incremental lane contribution, or robustness across alpha assumptions.",
        "evidence_role": null,
        "required_parameters": [
          "package_dir"
        ],
        "optional_parameters": [
          "output_dir",
          "table_keys"
        ],
        "identity_fields": [],
        "outputs": [
          {
            "artifact_type": "table",
            "formats": [
              "csv",
              "html"
            ]
          },
          {
            "artifact_type": "manifest",
            "formats": [
              "json"
            ]
          }
        ],
        "execution_contract": {
          "entry_point": "modules.pdp.attribute_table_templates.build_attribute_tables_from_package",
          "cli": "scripts/build_attribute_table_artifacts.py",
          "required_parameters": [
            "package_dir"
          ],
          "optional_parameters": [
            "output_dir",
            "table_keys"
          ],
          "deterministic_boundary": "The table builder reads package CSVs, selects rows, formats values, writes CSV/HTML artifacts, and returns a manifest. The model chooses the table and interprets the rows, but does not compute or render the table."
        },
        "object_type": "table"
      },
      "orchestrator_readiness": {
        "ready": true,
        "required_sidecars": [
          "source",
          "context",
          "data",
          "manifest",
          "recipe"
        ],
        "missing_sidecars": [],
        "broken_sidecars": [],
        "issues": []
      },
      "display_row_limit": 5
    }
  ]
}
