or run

npx @tessl/cli init
Log in

Version

Files

tile.json

rubric.jsonevals/scenario-8/

{
  "context": "Evaluates how well the solution uses Plotly.js to construct an interactive dual-series time plot with the required hover details, range handling, controls, and export behavior. Checks focus on correct Plotly API calls and configurations that realize the spec's interactions.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Interactive render",
      "description": "Uses Plotly.newPlot on the provided container with two line traces mapped to the readings, sets the x-axis to date/time, applies axis labels, and pipes options.title into layout.title to surface the heading.",
      "max_score": 20
    },
    {
      "name": "Initial window",
      "description": "Computes the trailing initialRangeHours window from the latest timestamp and applies it to layout.xaxis.range (or via Plotly.relayout) so the plot opens zoomed while retaining the full dataset for later zoom-out.",
      "max_score": 15
    },
    {
      "name": "Hover formatting",
      "description": "Configures hovertemplate (and customdata as needed) on both traces so hovers show ISO timestamps, values suffixed with kW, and when both traces align on x, include the actual-versus-forecast delta rounded to one decimal; uses an interaction mode like hovermode: 'x unified' to keep the tooltip synchronized.",
      "max_score": 20
    },
    {
      "name": "Latest annotations",
      "description": "Places layout.annotations (or per-trace text positioned at the final point) that label the most recent data point of each trace without breaking interactivity.",
      "max_score": 10
    },
    {
      "name": "Reset controls",
      "description": "Enables Plotly's interactive controls for zoom/pan and a reset (resetScale2d/autoscale) in the modebar, keeping responsive behavior via config.responsive so users can navigate the full history.",
      "max_score": 15
    },
    {
      "name": "PNG export",
      "description": "Wires a download control using Plotly.downloadImage or Plotly.toImage configured for PNG format, scale 2, and transparent background (paper_bgcolor/plot_bgcolor set to rgba(0,0,0,0)).",
      "max_score": 20
    }
  ]
}