CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/pidge

Context tile for pidge notification library v3 - async API with NotificationClient, Message, and dispatch pattern

99

2.85x

Quality

99%

Does it follow best practices?

Impact

100%

2.85x

Average score across 3 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

rubric.jsonevals/scenario-2/

{
  "context": "Tests whether the agent implements correct retry logic for transient pidge dispatch failures, including exponential backoff, distinguishing permanent vs transient errors, short client lifecycle, and proper result checking.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Retry up to 3 attempts",
      "description": "Retry loop runs for at most 3 attempts (e.g. `for attempt in range(3)`) — not fewer, not more",
      "max_score": 12
    },
    {
      "name": "Exponential backoff sleep",
      "description": "Uses exponential backoff between retries — sleep duration follows a 2^attempt (or equivalent) pattern, not a fixed interval",
      "max_score": 12
    },
    {
      "name": "asyncio.sleep for backoff",
      "description": "Uses `await asyncio.sleep(...)` (not `time.sleep(...)`) for the backoff delay",
      "max_score": 8
    },
    {
      "name": "No retry on permanent errors",
      "description": "Distinguishes permanent errors (e.g. invalid address/recipient) from transient ones — does NOT retry when the error is permanent",
      "max_score": 10
    },
    {
      "name": "DispatchError caught",
      "description": "Catches `DispatchError` from pidge explicitly in the retry loop",
      "max_score": 10
    },
    {
      "name": "Logs failure after retries",
      "description": "After all retry attempts are exhausted, logs an error message (e.g. `logger.error`) indicating dispatch failed",
      "max_score": 8
    },
    {
      "name": "Async context manager lifecycle",
      "description": "Uses `async with NotificationClient(...) as client:` — does not hold the client open across multiple unrelated dispatch operations",
      "max_score": 10
    },
    {
      "name": "Result check after success",
      "description": "After a successful dispatch (no exception), checks `result.success` or `result.status == Status.SENT` before treating it as confirmed",
      "max_score": 10
    },
    {
      "name": "Logs message_id on success",
      "description": "Logs `result.message_id` after a successful dispatch",
      "max_score": 8
    },
    {
      "name": "notification_sent in response",
      "description": "Returns `notification_sent: True` or `notification_sent: False` in the function/endpoint result",
      "max_score": 12
    }
  ]
}

tile.json