CtrlK
BlogDocsLog inGet started
Tessl Logo

testland/ci-failure-triage

Decides what kind of failure a red CI test is before anyone starts fixing it. Extracts seven failure signals from the runner output, stack trace, run history, and environment metadata, then walks an ordered first-match-wins rule set to exactly one verdict: flaky-known, environment-drift, defect, timeout, flaky-pre-incident, or flake-of-unknown-cause. Emits the verdict together with the alternatives that were rejected and the specific condition each one failed, so the triage decision is auditable rather than asserted. Use when a test has just gone red and the next action depends on whether the cause is a product defect, a non-deterministic test, or drifted infrastructure.

98

1.12x
Quality

89%

Does it follow best practices?

Impact

99%

1.12x

Average score across 10 eval scenarios

SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-3/

{
  "context": "A missing-element error invites an immediate call, and the task even supplies the two candidate answers so the agent can simply endorse one. Both are unfalsifiable from what is here. The test has exactly two executions in its entire life, so there is no pass/fail record to separate an intermittent problem from a clean break; the two runs targeted different environments (a per-PR preview stack and shared staging), so the one green run is not a baseline for the red one; the flag state that would decide whether the form should have rendered is not logged anywhere and has no audit trail; and the screenshot or DOM capture that would show what was on the page was never uploaded because the artifact path matched nothing. Predicted baseline failure: the agent reads NoSuchElementException as self-explanatory, picks the wrong-selector story or the missing-feature story, assigns it to a team, and reports the other as unlikely - a coin flip presented as a diagnosis, on a test whose first window has not closed.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Triage document produced",
      "description": "A file named triage-referral-e2e.md exists and addresses this failure.",
      "max_score": 5
    },
    {
      "name": "States that a two-run-old test cannot be settled from this material",
      "description": "The document's headline answer is that no determination can be made yet, and it gives the structural reason: the test has one prior execution, so there is no record that could separate an intermittent failure from a first genuine break. Endorsing either supplied theory as the answer scores zero. A determination softened by a caveat still scores zero. Reaching the right conclusion only from 'the screenshot is missing', without the absent-history point, scores at most half.",
      "max_score": 28
    },
    {
      "name": "MUST NOT choose between the wrong-selector and missing-feature stories",
      "description": "Scores zero if the document concludes the selector is wrong, or that the referral form is not rendering, or ranks one as likely and the other as unlikely. Listing both as open candidates alongside the specific artefact that would separate them is the correct treatment and earns full credit here.",
      "max_score": 18
    },
    {
      "name": "The two runs identified as non-comparable",
      "description": "The document notes that the passing run targeted https://pr-2210.preview.acme.internal and the failing run targeted https://staging.acme.internal, so the green result is not a baseline for the red one and 'it passed before' proves nothing about staging. Missing this scores zero - it is the observation that turns an apparent regression into an unestablished one. Noting the two URLs without drawing the consequence scores at most half.",
      "max_score": 20
    },
    {
      "name": "Missing artefacts named specifically",
      "description": "Full credit needs at least three of: the failure screenshot or page source, with the note that the upload step matched nothing at e2e-artifacts/** and must be fixed before the next run; the referral flag's state on staging at 07:02, which no log or audit records; a baseline of repeated runs of the same commit against staging; the rendered DOM or a manual check of whether [data-qa=referral-code-input] exists on staging at all. Each should say what it would let the reader conclude. Vague 'more logs' or 'more context' scores zero.",
      "max_score": 20
    },
    {
      "name": "Correctly excludes what can be excluded",
      "description": "The document uses the evidence that is present: the runner image and browser versions are identical across both runs so the toolchain did not move; the other ten E2E tests in the same run are green so this is not a broad environment failure; nothing under src/referral has changed since the merge. Full credit needs at least two of these with the values quoted, and requires that absent signals are still reported as absent rather than swept in with these.",
      "max_score": 12
    },
    {
      "name": "Next action is evidence collection, and the agent does not invent its result",
      "description": "The recommended action is to fix the artifact path and re-run the same commit against staging a stated number of times, plus read the flag state - recommended, not narrated as already done. Scores zero if the document reports or assumes the outcome of a re-run it did not perform, or presents a hypothetical re-run result as evidence.",
      "max_score": 12
    },
    {
      "name": "No routing to a team the evidence does not support",
      "description": "The document does not assign the failure to the referral team or back to whoever inherits the contractor's tests as though ownership were established. Naming who would own it under each candidate outcome is fine and earns full credit; assigning it outright scores zero.",
      "max_score": 10
    }
  ]
}

SKILL.md

tile.json