{
  "schema_version": 1,
  "diagram_type": "sequence",
  "meta": {
    "title": "Rubric Rumble: turn two answer sets into one decision",
    "quality_profile": "showcase",
    "animation": "none",
    "column_fit": "spread",
    "viewBox": [
      1000,
      538
    ]
  },
  "participants": [
    {
      "id": "rr-judging-core",
      "type": "backend",
      "label": "Tournament core"
    },
    {
      "id": "rr-judging-judge",
      "type": "backend",
      "label": "Judge callback"
    },
    {
      "id": "rr-judging-rules",
      "type": "security",
      "label": "Field rules"
    },
    {
      "id": "rr-judging-bundle",
      "type": "backend",
      "label": "Pair request"
    },
    {
      "id": "rr-judging-provider",
      "type": "cloud",
      "label": "Judge provider"
    },
    {
      "id": "rr-judging-contract",
      "type": "security",
      "label": "Decision check"
    },
    {
      "id": "rr-judging-ledger",
      "type": "database",
      "label": "Decision log"
    }
  ],
  "messages": [
    {
      "id": "rr-04-judging-1",
      "from": "rr-judging-core",
      "to": "rr-judging-judge",
      "label": "Candidate A and incumbent B views",
      "y": 160
    },
    {
      "id": "rr-04-judging-2",
      "from": "rr-judging-judge",
      "to": "rr-judging-rules",
      "label": "Rules path: aggregate case-sensitive matches",
      "y": 189
    },
    {
      "id": "rr-04-judging-3",
      "from": "rr-judging-rules",
      "to": "rr-judging-judge",
      "label": "Greater score wins; equal score uses ID order",
      "y": 218,
      "variant": "return"
    },
    {
      "id": "rr-04-judging-4",
      "from": "rr-judging-judge",
      "to": "rr-judging-bundle",
      "label": "Randomized A/B: task + rubric + examples",
      "y": 247
    },
    {
      "id": "rr-04-judging-5",
      "from": "rr-judging-bundle",
      "to": "rr-judging-provider",
      "label": "Source + A/B outputs; withhold model IDs",
      "y": 276
    },
    {
      "id": "rr-04-judging-6",
      "from": "rr-judging-provider",
      "to": "rr-judging-judge",
      "label": "Returned text, usage and completion state",
      "y": 305,
      "variant": "return"
    },
    {
      "id": "rr-04-judging-7",
      "from": "rr-judging-judge",
      "to": "rr-judging-contract",
      "label": "Recover one object; validate winner + reason",
      "y": 334,
      "variant": "security"
    },
    {
      "id": "rr-04-judging-8",
      "from": "rr-judging-contract",
      "to": "rr-judging-judge",
      "label": "Accept only null / finite numeric 0..1 confidence",
      "y": 363,
      "variant": "return"
    },
    {
      "id": "rr-04-judging-9",
      "from": "rr-judging-judge",
      "to": "rr-judging-ledger",
      "label": "Save verdict, assignment and call link",
      "y": 392
    },
    {
      "id": "rr-04-judging-10",
      "from": "rr-judging-judge",
      "to": "rr-judging-core",
      "label": "Map A/B verdict to core candidate order",
      "y": 421,
      "variant": "return"
    },
    {
      "id": "rr-04-judging-11",
      "from": "rr-judging-judge",
      "to": "rr-judging-core",
      "label": "Malformed / failed judgment raises",
      "y": 450,
      "variant": "security"
    }
  ],
  "cards": [
    {
      "dot": "cyan",
      "title": "One randomized presentation per comparison",
      "items": [
        "Candidate identity metadata is withheld; source or output text can still reveal it. The saved A/B assignment makes the whole-set verdict traceable."
      ]
    },
    {
      "dot": "rose",
      "title": "Recover wrappers; keep decision validation",
      "items": [
        "One JSON object may have prose or fences around it. Invalid fields, duplicate keys or competing objects fail. Rules retain their exact-field scoring and ID tie-break."
      ]
    }
  ]
}
