Benchmark Social Graphics
Leading rule: deterministic facts, generated style. Image models may make the card shell; code renders numbers, axes, datapoints, tables, and labels.
Process
Compute
- Read paired result artifacts, usually
runs/<run>/<config>/<task>/rep0/result.json.
- Include only tasks present in both configs.
- Use means for README/Twitter summaries unless the user asks for medians.
- For DeepSWE difficulty buckets, default to baseline partial-reward terciles unless a better out-of-sample difficulty signal exists.
- Completion: every displayed metric has a computed source.
Separate style from facts
- Use image generation for background, card texture, typography mood, and rough layout only.
- Render final charts/tables with deterministic SVG/HTML/canvas code.
- If a generated card has good style but wrong geometry, cover only the chart/table region with a code-rendered overlay.
- Completion: no exact number or datapoint position depends on image-generation output.
Render reproducibly
- Save a script beside the output, e.g.
runs/<run>/reports/make_*.py.
- Prefer SVG generated in code, rasterized with
rsvg-convert, composited with magick.
- Version iterations (
-v2, -v3) and preserve winners.
- Completion: rerunning the script recreates the handed-off PNG.
Place labels deliberately
- Labels go near their datapoints, not centered in empty chart bands.
- Move labels before changing axes; change axes only when points or labels are clipped/cramped.
- Directionality must be explicit: lower-is-better vs higher-is-better.
- Completion: read the final image and confirm labels, axes, and values are legible at social-card size.
Chart Defaults
- y-axis for DeepSWE outcome charts:
partial reward · ↑ better
- x-axis options:
cost · $ per task → more expensive
tokens · per task → more tokens
- black dot: baseline
- blue-purple dot/arrow: comparison config, default
#2d2af4
- arrows: straight unless the user requests curves
- y-axis: include 30%–100% when hard buckets sit near 40%
- x-axis: tightest readable range that includes all points and label room
Tier label placement defaults:
- EASY near the easy baseline point, often lower-right if there is room
- MEDIUM near/below the medium comparison-config point
- HARD near the hard cluster, clear of the x-axis
References
Load only when needed:
- Current Ponytail DeepSWE values and accepted output paths: references/ponytail-deepswe.md
- Card style and image-generation prompts: references/social-card-style.md
Checklist
Before handoff:
1---2name: benchmark-social-graphics3description: Benchmark graphics. Use when creating social cards, README benchmark tables, chart images, X/Twitter graphics, or visual summaries from eval result artifacts where exact numbers, axes, labels, or datapoint placement matter.4---56# Benchmark Social Graphics78Leading rule: **deterministic facts, generated style**. Image models may make the card shell; code renders numbers, axes, datapoints, tables, and labels.910## Process11121. **Compute**13 - Read paired result artifacts, usually `runs/<run>/<config>/<task>/rep0/result.json`.14 - Include only tasks present in both configs.15 - Use means for README/Twitter summaries unless the user asks for medians.16 - For DeepSWE difficulty buckets, default to baseline partial-reward terciles unless a better out-of-sample difficulty signal exists.17 - Completion: every displayed metric has a computed source.18192. **Separate style from facts**20 - Use image generation for background, card texture, typography mood, and rough layout only.21 - Render final charts/tables with deterministic SVG/HTML/canvas code.22 - If a generated card has good style but wrong geometry, cover only the chart/table region with a code-rendered overlay.23 - Completion: no exact number or datapoint position depends on image-generation output.24253. **Render reproducibly**26 - Save a script beside the output, e.g. `runs/<run>/reports/make_*.py`.27 - Prefer SVG generated in code, rasterized with `rsvg-convert`, composited with `magick`.28 - Version iterations (`-v2`, `-v3`) and preserve winners.29 - Completion: rerunning the script recreates the handed-off PNG.30314. **Place labels deliberately**32 - Labels go near their datapoints, not centered in empty chart bands.33 - Move labels before changing axes; change axes only when points or labels are clipped/cramped.34 - Directionality must be explicit: lower-is-better vs higher-is-better.35 - Completion: read the final image and confirm labels, axes, and values are legible at social-card size.3637## Chart Defaults3839- y-axis for DeepSWE outcome charts: `partial reward · ↑ better`40- x-axis options:41 - `cost · $ per task → more expensive`42 - `tokens · per task → more tokens`43- black dot: baseline44- blue-purple dot/arrow: comparison config, default `#2d2af4`45- arrows: straight unless the user requests curves46- y-axis: include 30%–100% when hard buckets sit near 40%47- x-axis: tightest readable range that includes all points and label room4849Tier label placement defaults:5051- EASY near the easy baseline point, often lower-right if there is room52- MEDIUM near/below the medium comparison-config point53- HARD near the hard cluster, clear of the x-axis5455## References5657Load only when needed:5859- Current Ponytail DeepSWE values and accepted output paths: [references/ponytail-deepswe.md](references/ponytail-deepswe.md)60- Card style and image-generation prompts: [references/social-card-style.md](references/social-card-style.md)6162## Checklist6364Before handoff:6566- [ ] every displayed number traces to artifacts or a disclosed reference67- [ ] paired comparisons use the same task set68- [ ] axes include all datapoints without clipping69- [ ] labels do not collide with datapoints, axes, or each other70- [ ] lower/higher-better direction is visible71- [ ] repro script is saved next to the image72- [ ] final PNG path is stated