rankComparedFindings function

List<ComparedFinding> rankComparedFindings({
  1. List<ComparedItem> previews = const [],
  2. List<ScenarioComparison> scenarios = const [],
})

Every row worth attention, worst first, both halves merged.

One ranking, however many surfaces ask for it. ComparedState is declared worst-first, so ranking is a sort — and doing it here rather than at each surface is what stops the CLI, the MCP action and a consumer's script from each having their own idea of what counts and in what order.

Implementation

List<ComparedFinding> rankComparedFindings({
  List<ComparedItem> previews = const [],
  List<ScenarioComparison> scenarios = const [],
}) =>
    <ComparedFinding>[
      for (var item in previews)
        if (isComparedFinding(item.state))
          ComparedFinding(
            id: item.id,
            half: ComparedHalfKind.previews,
            state: item.state,
            note: item.note,
            package: item.package,
            preview: item,
          ),
      for (var scenario in scenarios)
        if (isComparedFinding(scenario.state))
          ComparedFinding(
            id: scenario.scenario,
            half: ComparedHalfKind.scenarios,
            state: scenario.state,
            package: scenario.package,
            scenario: scenario,
          ),
    ]..sort(
      (a, b) => a.state.index == b.state.index
          ? a.id.compareTo(b.id)
          : a.state.index.compareTo(b.state.index),
    );