(payload)
| 599 | } |
| 600 | |
| 601 | function renderComparison(payload) { |
| 602 | const diff = ensureComparisonPayload(payload); |
| 603 | const whyBullets = [ |
| 604 | `- Score delta: ${diff.scoreDelta >= 0 ? "+" : ""}${diff.scoreDelta}.`, |
| 605 | `- Grade moved from ${diff.gradeBefore} to ${diff.gradeAfter}.`, |
| 606 | `- Risk moved from ${diff.riskBefore} to ${diff.riskAfter}.`, |
| 607 | ]; |
| 608 | |
| 609 | if (diff.newFailures.length > 0) { |
| 610 | whyBullets.push(`- ${diff.newFailures.length} new failure${diff.newFailures.length === 1 ? "" : "s"} were introduced.`); |
| 611 | } |
| 612 | if (diff.resolvedFailures.length > 0) { |
| 613 | whyBullets.push(`- ${diff.resolvedFailures.length} failure${diff.resolvedFailures.length === 1 ? "" : "s"} were resolved.`); |
| 614 | } |
| 615 | |
| 616 | return [ |
| 617 | `# Plugin Eval Comparison: ${diff.target.name}`, |
| 618 | "", |
| 619 | section("At a Glance", [ |
| 620 | `- Score delta: ${diff.scoreDelta >= 0 ? "+" : ""}${diff.scoreDelta}`, |
| 621 | `- Grade: ${diff.gradeBefore} -> ${diff.gradeAfter}`, |
| 622 | `- Risk: ${diff.riskBefore} -> ${diff.riskAfter}`, |
| 623 | `- Budget delta (trigger/invoke/deferred): ${diff.budgetDelta.trigger_cost_tokens >= 0 ? "+" : ""}${diff.budgetDelta.trigger_cost_tokens} / ${diff.budgetDelta.invoke_cost_tokens >= 0 ? "+" : ""}${diff.budgetDelta.invoke_cost_tokens} / ${diff.budgetDelta.deferred_cost_tokens >= 0 ? "+" : ""}${diff.budgetDelta.deferred_cost_tokens}`, |
| 624 | ]), |
| 625 | "", |
| 626 | section("Why It Matters", whyBullets), |
| 627 | "", |
| 628 | section( |
| 629 | "Fix First", |
| 630 | diff.newFailures.length > 0 |
| 631 | ? diff.newFailures.map((item) => `- New failure: ${item}`) |
| 632 | : ["- No new failures were introduced."], |
| 633 | ), |
| 634 | "", |
| 635 | section("Recommended Next Step", renderNextAction(diff.nextAction)), |
| 636 | "", |
| 637 | section("Details", [ |
| 638 | detailsBlock( |
| 639 | "Resolved failures", |
| 640 | diff.resolvedFailures.length > 0 |
| 641 | ? diff.resolvedFailures.map((item) => `- ${item}`).join("\n") |
| 642 | : "- No resolved failures.", |
| 643 | ), |
| 644 | detailsBlock( |
| 645 | "New failures", |
| 646 | diff.newFailures.length > 0 |
| 647 | ? diff.newFailures.map((item) => `- ${item}`).join("\n") |
| 648 | : "- No new failures.", |
| 649 | ), |
| 650 | ]), |
| 651 | ].join("\n"); |
| 652 | } |
| 653 | |
| 654 | export function renderMarkdown(payload) { |
| 655 | if (payload.kind === "comparison") { |
no test coverage detected