CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/graceful-degradation

Every external call needs a timeout, every timeout needs a fallback — resilience patterns for HTTP, databases, and third-party services

88

4.72x
Quality

90%

Does it follow best practices?

Impact

85%

4.72x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-1/

{
  "context": "Tests whether the agent proactively applies graceful degradation when building a content feed that depends on four internal services with different criticality levels. The task mentions which services are critical vs supplementary as a business fact, but says nothing about timeouts, fallbacks, retries, or circuit breakers. The agent should add all resilience patterns on its own.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "timeouts-on-all-service-calls",
      "description": "Every HTTP request to social graph, posts, ads, and notifications services includes an explicit timeout (AbortSignal.timeout, axios timeout, or equivalent). No bare fetch() calls.",
      "max_score": 15
    },
    {
      "name": "critical-vs-supplementary-handling",
      "description": "Social graph and posts services are treated as critical -- their failure results in an error response or empty feed with a clear message. Ads and notifications are treated as supplementary -- their failure results in graceful omission (no ads in feed, notification count defaults to 0 or null).",
      "max_score": 15
    },
    {
      "name": "supplementary-fetched-independently",
      "description": "Ads and notifications are fetched independently from each other and from the critical path. One supplementary service failing does not block other supplementary services. Uses Promise.allSettled() or individual try/catch.",
      "max_score": 12
    },
    {
      "name": "fallback-for-ads-service",
      "description": "When the ads service fails, the feed is returned without sponsored content (empty ads or no ad items interspersed). The user still gets their content feed.",
      "max_score": 10
    },
    {
      "name": "fallback-for-notifications",
      "description": "When the notification badge service fails, unreadNotifications defaults to 0 or null rather than failing the entire response.",
      "max_score": 8
    },
    {
      "name": "retry-critical-services",
      "description": "The social graph or posts service (critical dependencies) includes retry logic with exponential backoff for transient errors, since their failure means no feed at all.",
      "max_score": 12
    },
    {
      "name": "structured-failure-logging",
      "description": "Caught dependency failures are logged with structured context: service name, error details, userId, and which fallback was used. Not just console.log(err).",
      "max_score": 10
    },
    {
      "name": "circuit-breaker-implemented",
      "description": "A circuit breaker is implemented for at least one service, tracking consecutive failures and short-circuiting to fallback after a threshold.",
      "max_score": 8
    },
    {
      "name": "warnings-in-response",
      "description": "The response includes a warnings or metadata field indicating which supplementary services were unavailable, so the client can adjust the UI.",
      "max_score": 10
    }
  ]
}

evals

scenario-1

criteria.json

task.md

tile.json